sed awk sed (Stream EDitor) —
потоковый текстовый редактор (а также язык программирования),
применяющий различные предопределённые текстовые преобразования к
последовательному потоку текстовых данных. awk (инициалы трёх разработчиков языка) — C-подобный скриптовый язык построчного разбора и обработки входного потока (например, текстового файла) по заданным шаблонам (регулярным выражениям).
Поиск и замена
Простая замена стандартного вывода: echo "This is a test" | sed 's/test/another test/' Простая замена old на new в test.txt изменения выводятся на экран без сохранения в файле. sed 's/old/new/' test.txt Заменить в файле параметр param= с любым значением на param=false.
sed -i 's/^param=.*/param=false/' file.txt Ключ -i указывает, что замена будет записана в файл. Если указать через точку расширение: -i.orig то в файл file.txt.orig будет записан оригинал до изменений.
sed -i.orig 's/^param=.*/param=false/' file.txt Прочие приёмы работы
Вывод строк, содержащих слово root (аналог grep)
sed -n /root/p /etc/passwd Просто вывод например 4х первых строк файла. (аналог grep)sed 4q /etc/fstab Вывод конфига без комментариев, используя регулярные выражения:
sed /^#/d /etc/fstab Несколько строк сценария в одной команде sed. Для этого перед каждым сценарием указывается ключ -e. Например вывод конфига без комментариев и без пустых строк.
sed -e /^#/d -e '/^$/d' /etc/fstab Наоборот, раскомментировать строки с 8258550B5854FF7B и сохранить изменения в файле:
sed -i.orig /8258550B5854FF7B/s/^#// /etc/fstab Команды, если их много, можно указывать не в самой строке, а загружать из файла. Например содержимое файла list:
Тогда команда обработки файла списком инструкций из list бует такова: sed -f list /etc/fstab
AWK
Подсчитать количество строк в файле (аналог wc -l /etc/passwd ):
awk 'END{print NR}' /etc/passwd Вывод из файла строки содержащей слово root (аналог grep)
awk /^root/{print} /etc/passwd Вывод первых 5 строк файла (аналог grep)
awk '{print}NR==5{exit}' /etc/passwd Взять из файла с первой по восьмую строки и из них вывести только первые пять
sed -n '1,8p;5q' /etc/passwd Вывод только 9го столбца из табличного вывода ls -l /
ls -l /|awk '{print $9}'
Использованные ссылки:
- Sed и awk — Виктор Ашик https://youtu.be/81r8sD6yDJo
- https://www.opennet.ru/openforum/vsluhforumID9/9099.html
- https://habr.com/company/ruvds/blog/327530/
- https://ru.wikipedia.org/wiki/Sed
- https://ru.wikipedia.org/wiki/Awk
|