Потоковый редактор текста 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
используется синтаксис:
sed '#,#d' filename.txt
Замените символы решетки #
на начало и конец диапазона строк. Например:
oleg@mobile:~/Directory:$ sed '1,2d' example.txt
Чтобы установить пакеты с помощью этих PKGBUILD, нам потребуется помощник AUR, такой как yay, который не предустановлен в Arch Linux и недоступен в официальных репозиториях Arch.
Конечно вы можете вручную устанавливать пакеты из AUR без использования этой утилиты, но она облегчает процесс генерирования и установки пакетов с минимальным взаимодействием с пользователем.
oleg@mobile:~/Directory:$
Вывод показывает, что команда удалила первую строку и вторую (пробельную).
Удаление строк от определённой до последней
Для удаления строк с определённого номера строки до последней строки используется следующий синтаксис:
sed '#,$d' filename.txt
Таким образом для удаления всех строк от строки 3
до конца файла example.txt
следует выполнить следующее:
oleg@mobile:~/Directory:$ sed '3,$d' example.txt
Мощному менеджеру пакетов pacman, поставляемому по умолчанию в дистрибутивах на основе Arch не хватает функции загрузки пакетов из пользовательского репозитория Arch (AUR). AUR — это поддерживаемый сообществом репозиторий, содержащий тысячи сторонних пакетов в виде сценариев установки, также известных как PKGBUILD.
oleg@mobile:~/Directory:$
Вывод показывает, что были удалены все строки, кроме первой и второй (пробельной).
Заключение
В этой статье вы ознакомились с основными приёмами использования текстового потокового редактора SED для изменения файла через командную строку. Этот редактор позволит значительно повысить продуктивность вашей работы.