- 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/Unix системах. В основном он используется для поиска и замены текста , но так же может применяться и для других манипуляций, таких как вставка, удаление, поиск и т.п. С sed, вы можете отредактировать файл не выполняя полного его открытия. В sed так же поддерживаются регулярные выражения, которые превращают sed в мощное средство манипуляцией текста.
В этой статье приведу несколько примеров использования SED. Основной синтаксис использования sed:
sed ОПЦИИ… [СКРИПТ] [ВХОДНОЙ ФАЙЛ…]
1. Отобразить часть файла
С помощью sed мы можем просмотреть не весь файл, а только его часть. Посмотреть нужные строки можно так:
sed -n 22,29p testfile.txt
Опция n указывает что требуется вывести часть файла, а опция p, что требуется вывести только строки с 22 по 29.
2. Отобразить все кроме указанных строк.
sed 22,29d testfile.txt
Опция d указывает что надо удалить из вывода строки с 22 по 29.
3. Вывод каждой N строки начиная M строки .
Теперь, например выведем каждую 3-ю строку начиная со строки 2-ой.
sed -n '2-3p' file.txt
4. Удаление строки из файла используя sed.
sed Nd testfile.txt
Где N это номер строки а опция d указывает что надо удалить эту строку. Чтобы удалить самую последнюю строку в файле выполните команду:
sed $d testfile.txt
5. Удаление диапазона строк.
sed '29-34d' testfile.txt
Данная команда удалит строки с 29 по 34 из файла testfile.txt
6. Удаление всех строк кроме указанных.
Чтобы удалить все строки в файле, кроме нужных используйте «!»
sed '29-34!d' testfile.txt
Здесь опция «!» означает отрицание, то есть меняет значение на противоположное. Получается что мы НЕ удаляем указанные строки. Поэтому все линии кроме 29-34 будут удалены из файла testfile.txt.
7. Вставка пустой строки/пробелов.
Для добавления пустой строки после каждой НЕ пустой строки используем опцию «G»
sed G testfile.txt
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. Удаление всех комментариев и пустых строк.
Для удаления всех закомментированных строк (например начинающихся с #), а так же всех пустых строк выполните:
sed -e 's/#.*//;/^$/d' testfile.txt
Для удаления только комментариев:
sed -e 's/#.*//' testfile.txt
19. Получение списка пользователей из файла /etc/passwd.
sed 's/([^:]*).*/1/' /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» и отредактирует тот файл, на который эта ссылка указывает, вместо того чтобы редактировать файл ссылки как настоящий.