Учебники

Stream Editor — основной синтаксис

В этой главе представлены основные команды, которые поддерживает 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.