В этой главе представлены основные команды, которые поддерживает SED, и их синтаксис командной строки. SED может быть вызван в следующих двух формах:
sed [-n] [-e] 'command(s)' files sed [-n] -f scriptfile files
Первая форма позволяет указывать команды в строке, и они заключены в одинарные кавычки. Последнее позволяет указать файл сценария, который содержит команды SED. Тем не менее, мы можем использовать обе формы вместе несколько раз. SED предоставляет различные параметры командной строки для управления ее поведением.
Давайте посмотрим, как мы можем указать несколько команд SED. SED предоставляет команду удаления для удаления определенных строк. Удалим 1-ю, 2-ю и 5-ю строки. В данный момент игнорируйте все детали команды удаления. Мы обсудим больше о команде удаления позже.
Сначала отобразите содержимое файла с помощью команды cat .
[jerry]$ cat books.txt
Выполнив приведенный выше код, вы получите следующий результат:
1) Буря мечей, Джордж Р. Р. Мартин, 1216 2) Две башни, JRR Толкиен, 352 3) Алхимик, Пауло Коэльо, 197 4) Братство Кольца, JRR Толкиен, 432 5) Паломничество, Пауло Коэльо, 288 6) Игра престолов, Джордж Р. Р. Мартин, 864
Теперь поручите САС удалить только определенные строки. Здесь, чтобы удалить три строки, мы указали три отдельные команды с опцией -e.
[jerry]$ sed -e '1d' -e '2d' -e '5d' books.txt
Выполнив приведенный выше код, вы получите следующий результат:
3) Алхимик, Пауло Коэльо, 197 4) Братство Кольца, JRR Толкиен, 432 6) Игра престолов, Джордж Р. Р. Мартин, 864
Кроме того, мы можем написать несколько команд SED в текстовом файле и предоставить текстовый файл в качестве аргумента SED. SED может применять каждую команду в буфере шаблонов. Следующий пример иллюстрирует вторую форму SED.
Сначала создайте текстовый файл, содержащий команды SED. Для простоты понимания давайте использовать те же команды SED.
[jerry]$ echo -e "1d\n2d\n5d" > commands.txt [jerry]$ cat commands.txt
Выполнив приведенный выше код, вы получите следующий результат:
1d 2d 5d
Теперь проинструктируйте SED читать команды из текстового файла. Здесь мы достигаем того же результата, что и в приведенном выше примере.
[jerry]$ sed -f commands.txt books.txt
Выполнив приведенный выше код, вы получите следующий результат:
3) Алхимик, Пауло Коэльо, 197 4) Братство Кольца, JRR Толкиен, 432 6) Игра престолов, Джордж Р. Р. Мартин, 864
Стандартные варианты
SED поддерживает следующие стандартные опции:
-
-n: печать по умолчанию буфера шаблонов. Например, следующая команда SED не показывает никаких выходных данных:
-n: печать по умолчанию буфера шаблонов. Например, следующая команда SED не показывает никаких выходных данных:
[jerry]$ sed -n '' quote.txt
-e
-e
[jerry]$ sed -e '' -e 'p' quote.txt
Выполнив приведенный выше код, вы получите следующий результат:
Есть только одна вещь, которая делает мечту невозможной: страх неудачи. Есть только одна вещь, которая делает мечту невозможной: страх неудачи. - Пауло Коэльо, Алхимик - Пауло Коэльо, Алхимик
-
-f
: Следующий аргумент — это файл, содержащий команды редактирования. Угловые скобки подразумевают обязательный параметр. В следующем примере мы указываем команду печати через файл:
-f
[jerry]$ echo "p" > commands [jerry]$ sed -n -f commands quote.txt
Выполнив приведенный выше код, вы получите следующий результат:
Есть только одна вещь, которая делает мечту невозможной: страх неудачи. - Пауло Коэльо, Алхимик
Специальные параметры GNU
Давайте быстро пройдемся по конкретным опциям SED в GNU. Обратите внимание, что эти параметры специфичны для GNU; и может не поддерживаться другими вариантами САС. В последующих разделах мы обсудим эти варианты более подробно.
-n, —quiet, —silent: То же, что и стандартная опция -n.
-e скрипт, —expression = скрипт: То же, что и стандартная опция -e.
-f файл-сценария, —file = файл-сценария: То же, что и стандартная опция -f.
—follow-symlinks: если эта опция включена, SED следует по символическим ссылкам при редактировании файлов на месте.
-i [SUFFIX], —in-place [= SUFFIX]: эта опция используется для редактирования файла на месте. Если указан суффикс, он создает резервную копию исходного файла, в противном случае он перезаписывает исходный файл.
-l N, —line-lenght = N: эта опция устанавливает длину строки для команды l равной N символам.
—posix: эта опция отключает все расширения GNU.
-r, —regexp-extended: эта опция позволяет использовать расширенные регулярные выражения вместо базовых регулярных выражений.
-u, —unbuffered: Когда эта опция включена, SED загружает минимальный объем данных из входных файлов и чаще очищает выходные буферы. Это полезно для редактирования вывода «tail -f», когда вы не хотите ждать вывода.
-z, —null-data: по умолчанию SED разделяет каждую строку символом новой строки. Если указана опция NULL-data, она разделяет строки символами NULL.