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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

Рейтинг
( 1 оценка, среднее 5 из 5 )
Понравилась статья? Поделиться с друзьями:
Блог админа