- Команда sed в Linux
- Синтаксис
- Опции
- Использование команды sed в Linux
- Замена указанного текста
- Замена всех вхождений указанного текста
- Замена определённого вхождения в строке
- Вывод только строки с замещающим текстом
- Замена текста с игнорированием регистра
- Замена указанного текста в определённой строке
- Замена текста только в определённом диапазоне строк
- Удаление определённой строки
- Удаление строки в определённом диапазоне строк
- Удаление строк от определённой до последней
- Заключение
Команда sed в Linux
Потоковый редактор текста SED (Stream EDitor) позволяет быстро и эффективно редактировать файлы. В Linux команда sed часто используется для замены текста.
- Синтаксис
- Опции
- Использование команды sed в Linux
- Замена указанного текста
- Замена всех вхождений указанного текста
- Замена определённого вхождения в строке
- Вывод только строки с замещающим текстом
- Замена текста с игнорированием регистра
- Замена указанного текста в определённой строке
- Замена текста только в определённом диапазоне строк
- Удаление определённой строки
- Удаление строки в определённом диапазоне строк
- Удаление строк от определённой до последней
Синтаксис
sed [оции. ] [скрипт] [входной_файл. ]
Опции
-n, —quiet, —silent Выключить автоматическую печать образца —debug Комментировать выполнение программы -e script, —expression=сскрипт Добавить сскрипт в исполняемые команды -f script-file, —file=файл-скрипта Добавить содержимое файла-скрипта в исполняемые команды —follow-symlinks Переходить по символьным ссылкам при обработке на месте -i[СУФФИКС], —in-place[=СУФФИКС] Править файлы на месте (создаёт копию, если указан СУФФИКС) -l N, —line-length=N Задать желаемую длину до переноса строки для команды l -E, -r, —regexp-extended Использовать в скрипте расширенные регулярные выражения (для переносимости используйте -E ) -s, —separate Рассматривать файлы раздельно, а не в виде одного длинного непрерывного потока -u, —unbuffered Загружать минимальный объём данных из входных файлов и чаще сбрасывать выходные буферы на диск -z, —null-data Разделять строки символами NUL
Использование команды sed в Linux
Команда отображает изменения, сделанные ей, в своём выводе. Если вы желаете переписать исходный файл, то используйте опцию -i , но это не рекомендуется. Целесообразнее сохранить изменения в другом (новом) файле. Для этого перенаправьте вывод, добавив > newfilename.txt в конце команды.
Замена указанного текста
В Linux команда sed чаще всего используется для замены текста. Она ищет указанный шаблон в файле и заменяет его нужной строкой.
Для замены текста с помощью sed , используется флаг замены s и разделители (обычно косые черты — / ) для разделения текстовых полей:
sed 's/old_string/new_string/' filename.txt
Замените old_string исходным текстом и new_string текстом, на который вы хотите его заменить.
Воспользуемся следующим текстом:
oleg@mobile:~/Directory:$ cat example.txt Мощному менеджеру пакетов pacman, поставляемому по умолчанию в дистрибутивах на основе Arch не хватает функции загрузки пакетов из пользовательского репозитория Arch (AUR). AUR — это поддерживаемый сообществом репозиторий, содержащий тысячи сторонних пакетов в виде сценариев установки, также известных как PKGBUILD. Чтобы установить пакеты с помощью этих PKGBUILD, нам потребуется помощник AUR, такой как yay, который не предустановлен в Arch Linux и недоступен в официальных репозиториях Arch. Конечно вы можете вручную устанавливать пакеты из AUR без использования этой утилиты, но она облегчает процесс генерирования и установки пакетов с минимальным взаимодействием с пользователем. oleg@mobile:~/Directory:$
Данный текст содержит 5 строк, 2 из них являются пробельными.
Заменим AUR на Aur . На выходе отобразится изменённый текст:
oleg@mobile:~/Directory:$ sed 's/AUR/Aur/' example.txt Мощному менеджеру пакетов pacman, поставляемому по умолчанию в дистрибутивах на основе Arch не хватает функции загрузки пакетов из пользовательского репозитория Arch (Aur). AUR — это поддерживаемый сообществом репозиторий, содержащий тысячи сторонних пакетов в виде сценариев установки, также известных как PKGBUILD. Чтобы установить пакеты с помощью этих PKGBUILD, нам потребуется помощник Aur, такой как yay, который не предустановлен в Arch Linux и недоступен в официальных репозиториях Arch. Конечно вы можете вручную устанавливать пакеты из Aur без использования этой утилиты, но она облегчает процесс генерирования и установки пакетов с минимальным взаимодействием с пользователем. oleg@mobile:~/Directory:$
Из вывода видно, что произошла замена лишь первого вхождения искомого текста.
Замена всех вхождений указанного текста
По умолчанию sed заменяет только первое вхождение указанного текста в каждой строке. Она ищет первое вхождение указанного текста в строке, заменяет его и переходит к следующей строке. Например, при наличии нескольких вхождений этого слова в одной строке команда заменяет только первое вхождение.
Если в одной и той же строке присутствует несколько вхождений одного и того же текста, то добавив в команду флаг g можно изменить их все.
Команда для замены каждого вхождения заданного текста:
sed 's/old_string/new_string/g' filename.txt
Например, для замены всех вхождений AUR на Aur в файле example.txt вводим:
oleg@mobile:~/Directory:$ sed 's/AUR/Aur/g' example.txt Мощному менеджеру пакетов pacman, поставляемому по умолчанию в дистрибутивах на основе Arch не хватает функции загрузки пакетов из пользовательского репозитория Arch (Aur). Aur — это поддерживаемый сообществом репозиторий, содержащий тысячи сторонних пакетов в виде сценариев установки, также известных как PKGBUILD. Чтобы установить пакеты с помощью этих PKGBUILD, нам потребуется помощник Aur, такой как yay, который не предустановлен в Arch Linux и недоступен в официальных репозиториях Arch. Конечно вы можете вручную устанавливать пакеты из Aur без использования этой утилиты, но она облегчает процесс генерирования и установки пакетов с минимальным взаимодействием с пользователем. oleg@mobile:~/Directory:$
Вывод показывает, что команда заменила все вхождения AUR .
Замена определённого вхождения в строке
Команда sed позволяет вам выбрать, какое вхождение указанного текста вы хотите заменить в каждой строке. Для этого добавьте числовой флаг, например 1 , 2 , и т. д.:
sed 's/old_string/new_string/#' filename.txt
Например, чтобы заменить второе вхождение Arch в каждой строке текста на ARCH , используем эту команду:
oleg@mobile:~/Directory:$ sed 's/Arch/ARCH/2' example.txt Мощному менеджеру пакетов pacman, поставляемому по умолчанию в дистрибутивах на основе Arch не хватает функции загрузки пакетов из пользовательского репозитория ARCH (AUR). AUR — это поддерживаемый сообществом репозиторий, содержащий тысячи сторонних пакетов в виде сценариев установки, также известных как PKGBUILD. Чтобы установить пакеты с помощью этих PKGBUILD, нам потребуется помощник AUR, такой как yay, который не предустановлен в Arch Linux и недоступен в официальных репозиториях ARCH. Конечно вы можете вручную устанавливать пакеты из AUR без использования этой утилиты, но она облегчает процесс генерирования и установки пакетов с минимальным взаимодействием с пользователем. oleg@mobile:~/Directory:$
Команда заменила два вхождения в первом абзаце (строке) текста и одно — во втором, пропустив первые вхождения.
Вывод только строки с замещающим текстом
По умолчанию sed команда выводит всё содержимое файла вместе с замещающим текстом. Если у вас много текста и вы хотите сосредоточиться на строках с примененными изменениями, добавьте в команду необходимые атрибуты.
Например, для вывода только тех строк, которые имеют подстановку при заданных условиях, используйте синтаксис:
sed -n 's/old_string/new_string/p' filename.txt
Опция -n отключает автоматическую печать, а флаг p предписывает sed печатать строки, в которых происходит замена.
Вы можете добавить флаг p к другим как в примере ниже:
oleg@mobile:~/Directory:$ sed -n 's/yay/YAY/1p' example.txt Чтобы установить пакеты с помощью этих PKGBUILD, нам потребуется помощник AUR, такой как YAY, который не предустановлен в Arch Linux и недоступен в официальных репозиториях Arch. oleg@mobile:~/Directory:$
Выведена была лишь строка, содержащая yay .
Замена текста с игнорированием регистра
По умолчанию команда sed чувствительна к регистру. Для игнорирования регистра при подстановке текста следует добавить флаг i в конце команды:
oleg@mobile:~/Directory:$ sed -n 's/yay/YAY/1p' example.txt Чтобы установить пакеты с помощью этих PKGBUILD, нам потребуется помощник AUR, такой как YAY, который не предустановлен в Arch Linux и недоступен в официальных репозиториях Arch. oleg@mobile:~/Directory:$
Команда изменит вхождения искомого текста, написанного в любом регистре.
Замена указанного текста в определённой строке
Для замены текста в определённой строке к флагу s вместо # добавляется номер строки в качестве префикса:
sed '# s/old_string/new_string/' filename.txt
Замена текста только в определённом диапазоне строк
Для замены несколько вхождений текста в диапазоне строк следует указывать диапазон строк:
sed '# s/old_string/new_string/' filename.txt
Удаление определённой строки
Для удаления строки из файла с помощью команды sed используется флаг d и следующий синтаксис:
sed '# s/old_string/new_string/' filename.txt
Укажите номер строки, которую вы хотите удалить, вместо символа решетки # и выполните команду.
Например, для удаления первой строки из файла example.txt введём:
oleg@mobile:~/Directory:$ sed '1d' example.txt Чтобы установить пакеты с помощью этих PKGBUILD, нам потребуется помощник AUR, такой как yay, который не предустановлен в Arch Linux и недоступен в официальных репозиториях Arch. Конечно вы можете вручную устанавливать пакеты из AUR без использования этой утилиты, но она облегчает процесс генерирования и установки пакетов с минимальным взаимодействием с пользователем. oleg@mobile:~/Directory:$
Удаление строки в определённом диапазоне строк
Для удаления нескольких строк в диапазоне строк с помощью команды sed используется синтаксис:
Замените символы решетки # на начало и конец диапазона строк. Например:
oleg@mobile:~/Directory:$ sed '1,2d' example.txt Чтобы установить пакеты с помощью этих PKGBUILD, нам потребуется помощник AUR, такой как yay, который не предустановлен в Arch Linux и недоступен в официальных репозиториях Arch. Конечно вы можете вручную устанавливать пакеты из AUR без использования этой утилиты, но она облегчает процесс генерирования и установки пакетов с минимальным взаимодействием с пользователем. oleg@mobile:~/Directory:$
Вывод показывает, что команда удалила первую строку и вторую (пробельную).
Удаление строк от определённой до последней
Для удаления строк с определённого номера строки до последней строки используется следующий синтаксис:
Таким образом для удаления всех строк от строки 3 до конца файла example.txt следует выполнить следующее:
oleg@mobile:~/Directory:$ sed '3,$d' example.txt Мощному менеджеру пакетов pacman, поставляемому по умолчанию в дистрибутивах на основе Arch не хватает функции загрузки пакетов из пользовательского репозитория Arch (AUR). AUR — это поддерживаемый сообществом репозиторий, содержащий тысячи сторонних пакетов в виде сценариев установки, также известных как PKGBUILD. oleg@mobile:~/Directory:$
Вывод показывает, что были удалены все строки, кроме первой и второй (пробельной).
Заключение
В этой статье вы ознакомились с основными приёмами использования текстового потокового редактора SED для изменения файла через командную строку. Этот редактор позволит значительно повысить продуктивность вашей работы.