SED в примерах
tr
regexp
sed
Типичный пример использования:
Замещающая правка
GNU sed имеет несколько новых особенностей, например замещающая правка файлов (замена первоначального файла результатом работы sed). Замещающая правка часто используется вместо сценария sed, например:
Работа по файлу
Несколько команд могут быть объединены в одном файле (например, subst.sed) и затем применены в виде:
Удаление пустых строк
Помимо замены, возможны и другие формы простой обработки. Например, следующий сценарий удаляет пустые строки или строки, которые содержат только пробелы:
Пакетная замена по итогам поиска
Замена всех упоминаний сайта dev-house.ru на ritcenter.com во всех файлах config.xml из каталога /home/user/.hudson:
Удаление граничных пробелов и комментариев в sed
Удаление комментариев и пустых строк
Объединение строк, разделенных символом
Удаление граничных пробелов и табуляций
Удаление пустых строк
Преобразовать DOS файл в UNIX
Для решения необходимо убрать ^M в конце строк.
Можно использовать tr для преобразования из DOS в Unix, однако это правильно отработает, если CR появляется в вашем файле только как первый байт пары байтов CRLF.
Как правило, это так, но не всегда. Затем необходимо дать команду:
Если вы знаете, как ввести возврат каретки в script (control-V, control-M, чтобы ввести control-M), тогда:
Еще один рабочий вариант:
Еще примеры:
# 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
Вывести текст вертикально
Замещение текста на значение переменной
Замещение исходной строки, содержащей переменную ($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-ую строку (имя ВМ)
Удалить одну последнюю строку из файла
Удалить строку по номеру из файла
Например строку номер 17:
Замена содержимого строки по ее номеру
N - номер строки, где производится замена
‘.*’ - замена всего содержимого строки
replacement-line - текст, который будет в строке с номером N
Хороший пример в программе arsenal/websites/ssl/ssl-wildcard-mass-upd.sh
Удалить последние N строк из файла:
# delete the last 10 lines of a file
sed -e :a -e '$d;N;2,10ba' -e 'P;D' # method 1
sed -n -e :a -e '1,10!{P;N;D;};N;ba' # method 2
tac
Еще один хитрый вариант (cat наоборот):
Замена части строки по шаблону (замена sed
Пример 1:
MYVAR="/var/cpanel/users/joebloggs:DNS9=domain.com"
NAME=${MYVAR%:*} # оставляет часть строки перед двоеточием (/var/cpanel/users/joebloggs)
NAME=${NAME##*/} # оставляет часть строки после последнего слеша (joebloggs)
${MYVAR#pattern} # delete shortest match of pattern from the beginning
${MYVAR##pattern} # delete longest match of pattern from the beginning
${MYVAR%pattern} # delete shortest match of pattern from the end
${MYVAR%%pattern} # delete longest match of pattern from the end
Пример 2:
Обрезка строковой переменной по номерам символов
${MYVAR:3} # удаляет из строки первые три символа
${MYVAR::3} # удаляет все символы после третьего
${MYVAR:3:5} # оставляет символы с четвертого по девятый (вырезает первые три и все из остатка после пятого)
Пример 3:
Опубликовано: 28.07.2020