Использование sed в Linux
Команда sed
Синтаксис:
sed опции -e команды файл
У команды есть два буфера, активный буфер шаблона и дополнительный
Утилита sed помещает каждую строку в буфер шаблона, затем над ней выполняются заданные действия если строка попадает под определенные условия
Затем строка исправленная или в исходном виде выводится в стандартный поток вывода
Строка удаляется из активного буфера и копируется в дополнительный буфер уступая место для обработки новой строки, т.е. пока обрабатывается новая строка, старая строка может использоваться в текущей итерации
Регулярные выражения
i* - любой символ, любое количество;
\+ - как звездочка, только один символ или больше;
\? - нет или один символ;
\{i\} - любой символ в количестве i;
\{i,j\} - любой символ в количестве от i до j;
\{i,\} - любой символ в количестве от i и больше
#Удалить строку, которая начинается на vmail
cat copypasswd | sed '/^vmail/d'
Команды sed
Утилите можно передать несколько команд через точку с запятой, либо использовать две опции -e
# - комментарий, не выполняется;
q - завершает работу сценария;
d - удаляет буфер шаблона и запускает следующую итерацию цикла;
p - вывести содержимое буфера шаблона;
n - вывести содержимое буфера шаблона и прочитать в него следующую строку;
s/что_заменять/на_что_заменять/опции - замена символов, поддерживаются регулярные выражения;
y/символы/символы - позволяет заменить символы из первой части на соответствующие символы из второй части;
w - записать содержимое буфера шаблона в файл;
N - добавить перевод строки к буферу шаблона;
D - если буфер шаблона не содержит новую строку, удалить его содержимое и начать новую итерацию цикла, иначе удалить содержимое буфера до символа перевода строки и начать новую итерацию цикла с тем, что останется;
g - заменить содержимое буфера шаблона, содержимым дополнительного буфера;
G - добавить новую строку к содержимому буфера шаблона, затем добавить туда же содержимое дополнительного буфера.
#Не выводить содержимое буфера в конце каждой итерации, но сделать вывод только строк с 1 по 5
cat copypasswd | sed -n '1,5p'
#Утилите можно передать несколько команд через точку с запятой, либо использовать две опции -e
#-f использовать команды из файла
cat copypasswd | sed -f sed.test
#Удалить ( исключить обработку указанных строк ) указанные строки из буфера и запустить следующую итерацию
cat copypasswd | sed '1,30d'
#Замена содержимого для строк 1,2,3
cat copypasswd | sed '1,3 s/bin/sbin/g'
Источники
Связанные темы
Использование команды tee в Linux
Использование wget и curl в Linux
Команда chattr и lsattr в Linux
Использование awk Linux Alpine
Блокировка пользователя в Linux
Проверка на необходимость перезапуска после обновления пакетов
Стандартные потоки и перенаправление ввода/вывода в Linux
Архивирование и сжатие файлов в Linux
Полезные команды и скрипты Linux
Условная конструкция if в Linux
Использование оператора select в языке shell
Внутренние и внешние команды linux
Использование конструкции case в Linux