SED в примерах

tr regexp sed

Типичный пример использования:

sed \-e 's/oldstuff/newstuff/g' inputFileName \> outputFileName

Замещающая правка

GNU sed имеет несколько новых особенностей, например замещающая правка файлов замена первоначального файла результатом работы sed. Замещающая правка часто используется вместо сценария sed, например:

sed -i 's/abc/def/' file

Работа по файлу

Несколько команд могут быть объединены в одном файле например, subst.sed и затем применены в виде:

sed -f subst.sed inputFileName > outputFileName

Удаление пустых строк

Помимо замены, возможны и другие формы простой обработки. Например, следующий сценарий удаляет пустые строки или строки, которые содержат только пробелы:

sed -e '/^\s*$/d' inputFileName

Пакетная замена по итогам поиска

Замена всех упоминаний сайта dev-house.ru на ritcenter.com во всех файлах config.xml из каталога /home/user/.hudson:

sed -i 's/dev-house.ru/ritcenter.com/g' `find /home/user/.hudson -name config.xml`

Удаление граничных пробелов и комментариев в sed

Удаление комментариев и пустых строк

sed '/ *#/d; /^ *$/d'

Объединение строк разделенных символом \

sed ':a; /\\$/N; s/\\\n//; ta'

Удаление граничных пробелов и табуляций

sed 's/[ \t]*$//'

Удаление пустых строк

sed -e '/^$/d'

Преобразовать DOS файл в UNIX

Для решения необходимо убрать ^M в конце строк

Вы можете использовать tr для преобразования из DOS в Unix; однако вы можете сделать это только безопасно, если CR появляется в вашем файле только как первый байт пары байтов CRLF. Это обычно так. Затем вы используете:

tr -d '\015' < DOS-file > UNIX-file

Если вы знаете, как ввести возврат каретки в script control\-V, control\-M, чтобы ввести control\-M, тогда:

sed 's/^M$//'     # DOS to Unix
sed 's/$/^M/'     # Unix to DOS

Еще примеры:

# IN UNIX ENVIRONMENT: convert DOS newlines (CR/LF) to Unix format.
sed 's/.$//'               # assumes that all lines end with CR/LF
sed 's/^M$//'              # in bash/tcsh, press Ctrl-V then Ctrl-M
sed 's/\x0D$//'            # works on ssed, gsed 3.02.80 or higher

# IN UNIX ENVIRONMENT: convert Unix newlines (LF) to DOS format.
sed "s/$/`echo -e \\\r`/"            # command line under ksh
sed 's/$'"/`echo \\\r`/"             # command line under bash
sed "s/$/`echo \\\r`/"               # command line under zsh
sed 's/$/\r/'                        # gsed 3.02.80 or higher

Вывести текст вертикально

echo -n "Vertical" | sed 's/./&@/g; s/@$//' | tr '@' '\012'

Замещение текста на значение переменной

uname="OLeg Petrov"
sed -e 's/user/'${uname}'/g' omega.ovpn > config/omega-$uname.ovpn

Замещение исходной строки, содержащей переменную $POOLS на текст

sed -i 's%evsd -n $POOLS%evsd -g \/var\/lib\/sheepdog%g' /var/lib/lxc/CNDR-0003/rootfs/etc/systemd/system/evstorage.service

здесь используем в качестве разделителя выражений “%”, вместо “/”

Вырезать строку по номеру из файла

Например, 21-ую строку имя ВМ 

os server show -f value 69430ca1-0bd3-4eec-8813-ffd6b9f65058 | sed '21q;d'

Замена содержимого строки по ее номеру

sed -i 'Ns/.*/replacement-line/' file.txt

N - номер строки, где производится замена

.* - замена всего содержимого строки

replacement-line - текст, который будет в строке с номером N

Хороший пример в моей программе arsenal/websites/ssl/ssl-wildcard-mass-upd.sh

28.07.2020