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
aizaro@mail.ru 28.07.2020