Sed linux вывести строку

Содержание
  1. 20 примеров использования потокового текстового редактора sed
  2. 1. Отобразить часть файла
  3. 2. Отобразить все кроме указанных строк.
  4. 3. Вывод каждой N строки начиная M строки .
  5. 4. Удаление строки из файла используя sed.
  6. 5. Удаление диапазона строк.
  7. 6. Удаление всех строк кроме указанных.
  8. 7. Вставка пустой строки/пробелов.
  9. 8. Поиск и замена строки.
  10. 9. Поиск и замена ВСЕХ найденных в файле слов.
  11. 10. Заменить n-ое вхождение шаблона строки.
  12. 11. Заменить текст на определенной строке.
  13. 12. Добавить строку до/после совпадения с заданным поиском.
  14. 13.Замена всей строки при совпадении поиска.
  15. Продвинутые опции sed
  16. 14. Запуск нескольких команд sed.
  17. 15. Создание резервной копии перед изменением файла.
  18. 16. Удаление текста начиная с указанного слова и заканчивая другим словом.
  19. 17. Добавление строк.
  20. 18. Удаление всех комментариев и пустых строк.
  21. 19. Получение списка пользователей из файла /etc/passwd.
  22. 20. Запрет перезаписи системных ссылок с помощью команды sed.
  23. sed в linux — примеры использования
  24. Примеры
  25. Фильтрация строк
  26. Замена по шаблону
  27. Удаление строк
  28. Извлечение подстрок

20 примеров использования потокового текстового редактора sed

Компьютерное

Команда sed (потоковый редактор) это очень мощная утилита работающая в Linux/Unix системах. В основном он используется для поиска и замены текста , но так же может применяться и для других манипуляций, таких как вставка, удаление, поиск и т.п. С sed, вы можете отредактировать файл не выполняя полного его открытия. В sed так же поддерживаются регулярные выражения, которые превращают sed в мощное средство манипуляцией текста.

В этой статье приведу несколько примеров использования SED. Основной синтаксис использования sed:

sed ОПЦИИ… [СКРИПТ] [ВХОДНОЙ ФАЙЛ…]

Картинка 11. Отобразить часть файла

С помощью sed мы можем просмотреть не весь файл, а только его часть. Посмотреть нужные строки можно так:

Опция n указывает что требуется вывести часть файла, а опция p, что требуется вывести только строки с 22 по 29.

2. Отобразить все кроме указанных строк.

Опция d указывает что надо удалить из вывода строки с 22 по 29.

3. Вывод каждой N строки начиная M строки .

Теперь, например выведем каждую 3-ю строку начиная со строки 2-ой.

4. Удаление строки из файла используя sed.

Где N это номер строки а опция d указывает что надо удалить эту строку. Чтобы удалить самую последнюю строку в файле выполните команду:

5. Удаление диапазона строк.

Данная команда удалит строки с 29 по 34 из файла testfile.txt

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

Чтобы удалить все строки в файле, кроме нужных используйте «!»

Читайте также:  Linux disable user login

Здесь опция «!» означает отрицание, то есть меняет значение на противоположное. Получается что мы НЕ удаляем указанные строки. Поэтому все линии кроме 29-34 будут удалены из файла testfile.txt.

7. Вставка пустой строки/пробелов.

Для добавления пустой строки после каждой НЕ пустой строки используем опцию «G»

8. Поиск и замена строки.

Для поиска и замены найденной строки в файле:

sed 's/danger/safety/' testfile.txt

В этом примере мы ищем слово danger и сразу меняем его на слово safety в каждой строке, но только в первом найденном вхождении.

9. Поиск и замена ВСЕХ найденных в файле слов.

Для замены слова полностью во всём файле используем опции «g» в комбинации с «s»

sed 's/danger/safety/g' testfile.txt

10. Заменить n-ое вхождение шаблона строки.

Мы также можем заменить строку при n-ом найденном. Например заменим «danger» на «safety» только на второе появление в поиске:

sed 's/danger/safety/2' testfile.txt

Для замены «danger» на «safety» во втором найденном результате в КАЖДОЙ строке файла:

sed 's/danger/safety/2g' testfile.txt

11. Заменить текст на определенной строке.

sed '4 s/danger/safety/' testfile.txt

Здесь мы явно указали что надо на 4 строке в файле testfile.txt заменить первое найденное слово danger на слово safety. Так же мы можем указать диапазон строк для поиска и последующей замены:

sed '4-9 s/danger/safety/' testfile.txt

12. Добавить строку до/после совпадения с заданным поиском.

Для добавления новой строки с неким содержимым после каждого найденного совпадения которое мы задали искать используйте опцию «a«:

sed '/danger/a "Это новая строка с текстом после найденного слова"' testfile.txt

Для добавления новой строки с неким содержимым перед каждым найденным совпадением которое мы задали искать используйте опцию «i«:

sed '/danger/i "Это новая строка с текстом вставленная до найденного совпадения поиска" ' testfile.txt

13.Замена всей строки при совпадении поиска.

Чтобы изменить целую строку на новую строку при совпадении шаблона поиска, нам нужно использовать опцию «c«:

sed '/danger/c "Строка со словом danger будет заменена на эту строку" ' testfile.txt

Продвинутые опции sed

14. Запуск нескольких команд sed.

Если нам нужно выполнить несколько выражений sed, мы можем использовать опцию «e» для объединения команд sed в цепочку:

sed -e 's/danger/safety/g' -e 's/hate/love/' testfile.txt

15. Создание резервной копии перед изменением файла.

Для создания резервной копии файла перед его изменением используем опцию «-i.bak«:

sed -i.bak -e 's/danger/safety/g' testfile.txt

Этак команда выполнит редактирование файла, но перед этим создаст его копию с расширением .bak. Вы можете, конечно же, использовать любое другое расширение.

Читайте также:  Astra linux удаление драйвера nvidia

16. Удаление текста начиная с указанного слова и заканчивая другим словом.

Чтобы удалить строку файла, начинающуюся с определенного слова и заканчивая другим словом выполните:

sed -e 's/danger.*stops//g' testfile.txt

В этом примере danger — слово начиная с которого будет удаляться, stops — где удаление завершится. Выражение «.*» указывает что между этими двумя словами может быть любое количество слов.

17. Добавление строк.

Чтобы добавить контент перед каждой строкой с помощью sed & regex, используйте команду:

sed -e 's/.*/testing sed &/' testfile.txt

Так мы перед каждой строкой добавим текст «testing sed».

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

Для удаления всех закомментированных строк (например начинающихся с #), а так же всех пустых строк выполните:

Для удаления только комментариев:

19. Получение списка пользователей из файла /etc/passwd.

Данная команда выведет на экран список пользовательских имён.

20. Запрет перезаписи системных ссылок с помощью команды sed.

При выполнении команды «sed -i» если вы редактируете не сам файл, а ссылку на него, файл ссылки будет удален и на его месте появится самый обычный файл. Чтобы этого не произошло, вам следует пользоваться опцией «—follow-symlinks»

К примеру мы захотели отключить SELinux на сервере с CentOS или RHEL:

sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

В этом примере sed проследует по символьной ссылке коей на самом деле является указанный файл «/etc/sysconfig/selinux» и отредактирует тот файл, на который эта ссылка указывает, вместо того чтобы редактировать файл ссылки как настоящий.

Источник

sed в linux — примеры использования

Утилита sed это мощный потоковый редактор текста с поддержкой регулярных выражений. С помощью sed вы можете заменять шаблоны текста (причем непосредственно в файле!), удалять строки (элементы массива), выводить подходящие по маске строки (подобно grep). Редактор sed поддерживает применение нескольких команд и расширенный синтаксис регулярных выражений (при котором не нужно экранировать спец. символы).

Важно!

В sed нет поддержки опережающих и ретроспективных проверок в регулярках! Для замены с использованием расширенного синтаксиса regex используйте:

find . -type f -name '*.blade.php' -exec perl -p -i -e 's/(? \;
Внимание!

В sed довольно проблемно работать с символом перевода строки! Самое удобное решение — это:

sed [-opt] 's/regex/replace/flag' input-file sed 's/regex/replace/flag' # замена найденных подстрок sed '1,5s/regex/replace/gi' # замена только в указанном диапазоне строк sed -r 's/regex/replace/g' # расширенный синтаксис regex (со спец символами) sed 's/regex//g' # удалить найденные подстроки sed '/regex/d' # удалить строки подходящие по маске sed -n 2p # вывести 2ю строку sed -n '/composer/p' # вывести только строки подходящие по маске sed 's/1-9/&/p' # & при замене означает сам ОБРАЗЕЦ 

В качестве разделителей можно использовать любые символы (напрмиер: # , @ ). Match части (которые внутри круглых скобок) доступны как \1 , \2 , \n .

-p вывести на экран -d удалить -i выполнять изменения непосредственно в файле -n не выводить результат замены/поиска на экран (--quiet, --silent) -e указывает на передачу инструкции (команда замены/удаления или выражение для поиска/фильтрации). Нужен, если Вы передаете более 1 инструкции -E расширенный regex, ближе к JavaScript, Go. Активны спец символы: 3+ -r расширенный regex синтаксис. Спец символы активны по умолчанию (--regexp-extended) -P perl-совместимый regex синтаксис -s consider files as separate rather than as a single continuous long stream (--separate) 

Флаги строки-команды (указывать в конце маски):

g глобальный поиск/замена, а не только первое совпадение i,-l регистро-независимый поиск p, печать найденных подстрок d удалить строки

Примеры

Фильтрация строк

Вывести файлы соответствующие маске:

Читайте также:  System tuning in linux

Строки длиннее 80 символов:

sed -n '/^./p' sed -n '/^./!p' # короче 80 символов 

Замена по шаблону

Заменить строки начинающиеся с:

sed 's/^line_start=.*$/line_start="replacement"/' file

Вывести вхождения (matches) через табуляцию:

Заменить названия файлов (composer на composer-dev):

echo 'aa,bb,xx' | sed "s/xx/cc/g" # aa,bb,cc

Заменить URL в файле (штука в разделителях | , и -i для замены в файле):

sed -i "s|$old_site_url|$new_site_url|g" file.yml

Заменить параметр в конфиге:

sed -ie '/project_file_path *=/ s|=.*$|=/home/pi/apps|' ~/.config/geany/geany.conf

Заменить значение в xml-конфиге:

sed -i -r 's/(name="width" value=")[^"]+"/\148KP"/' /etc/ImageMagick-6/policy.xml

Удалить начальные пробелы (аналог ltrim):

echo " some string" | sed 's/^ *//g' 
echo " test " | xargs echo " test " | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'

Удалить часть приглашения командной строки:

Удаление строк

Удалить из файла строку подходящую шаблону:

Удалить первую строку вывода:

sed 1d # удалить первую строку sed '5, 10d' # удалить строки c 5-й по 10-ю 

Удалить строки от первой до соответствующей regex:

echo '--some string' | sed 's/\(Some\)/New \1/i' # --New some string
Примечание

По умолчанию необходимо экранировать все спец. символы в regex’ах, что крайне затрудняет чтение масок. Для того, чтобы экранировать спец.символы только в случае описания в тексте их самих — включите расширенный режим regex выражений с помощью опции -r .

Удалить последние N=2 символа:

Извлечение подстрок

Вырезать / запомнить последние N=4 символа:

echo "latest" | sed "s/.*\(. $\)/\1/" # test

Источник

Оцените статью
Adblock
detector