- 20 примеров использования потокового текстового редактора sed
- 1. Отобразить часть файла
- 2. Отобразить все кроме указанных строк.
- 3. Вывод каждой N строки начиная M строки .
- 4. Удаление строки из файла используя sed.
- 5. Удаление диапазона строк.
- 6. Удаление всех строк кроме указанных.
- 7. Вставка пустой строки/пробелов.
- 8. Поиск и замена строки.
- 9. Поиск и замена ВСЕХ найденных в файле слов.
- 10. Заменить n-ое вхождение шаблона строки.
- 11. Заменить текст на определенной строке.
- 12. Добавить строку до/после совпадения с заданным поиском.
- 13.Замена всей строки при совпадении поиска.
- Продвинутые опции sed
- 14. Запуск нескольких команд sed.
- 15. Создание резервной копии перед изменением файла.
- 16. Удаление текста начиная с указанного слова и заканчивая другим словом.
- 17. Добавление строк.
- 18. Удаление всех комментариев и пустых строк.
- 19. Получение списка пользователей из файла /etc/passwd.
- 20. Запрет перезаписи системных ссылок с помощью команды sed.
- sed в linux — примеры использования
- Примеры
- Фильтрация строк
- Замена по шаблону
- Удаление строк
- Извлечение подстрок
20 примеров использования потокового текстового редактора sed
Компьютерное
Команда sed (потоковый редактор) это очень мощная утилита работающая в Linux/Unix системах. В основном он используется для поиска и замены текста , но так же может применяться и для других манипуляций, таких как вставка, удаление, поиск и т.п. С sed, вы можете отредактировать файл не выполняя полного его открытия. В sed так же поддерживаются регулярные выражения, которые превращают sed в мощное средство манипуляцией текста.
В этой статье приведу несколько примеров использования SED. Основной синтаксис использования sed:
sed ОПЦИИ… [СКРИПТ] [ВХОДНОЙ ФАЙЛ…]
1. Отобразить часть файла
С помощью sed мы можем просмотреть не весь файл, а только его часть. Посмотреть нужные строки можно так:
Опция n указывает что требуется вывести часть файла, а опция p, что требуется вывести только строки с 22 по 29.
2. Отобразить все кроме указанных строк.
Опция d указывает что надо удалить из вывода строки с 22 по 29.
3. Вывод каждой N строки начиная M строки .
Теперь, например выведем каждую 3-ю строку начиная со строки 2-ой.
4. Удаление строки из файла используя sed.
Где N это номер строки а опция d указывает что надо удалить эту строку. Чтобы удалить самую последнюю строку в файле выполните команду:
5. Удаление диапазона строк.
Данная команда удалит строки с 29 по 34 из файла testfile.txt
6. Удаление всех строк кроме указанных.
Чтобы удалить все строки в файле, кроме нужных используйте «!»
Здесь опция «!» означает отрицание, то есть меняет значение на противоположное. Получается что мы НЕ удаляем указанные строки. Поэтому все линии кроме 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. Вы можете, конечно же, использовать любое другое расширение.
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 удалить строки
Примеры
Фильтрация строк
Вывести файлы соответствующие маске:
Строки длиннее 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