Искусство программирования на языке сценариев командной оболочки




Программирование на языке сценариев командной оболочки - стр. 332


Из всего разнообразия операций, мы остановимся на трех, используемых наиболее часто. Это p -- печать (на stdout), d -- удаление и s -- замена.

Таблица B-1. Основные операции sed

Операция

Название

Описание

[диапазон строк]/p print Печать [указанного диапазона строк]
[диапазон строк]/d delete Удалить [указанный диапазон строк]
s/pattern1/pattern2/ substitute Заменить первое встреченное соответствие шаблону pattern1, в строке, на pattern2
[диапазон строк]/s/pattern1/pattern2/ substitute Заменить первое встреченное соответствие шаблону pattern1, на pattern2, в указанном диапазоне строк
[диапазон строк]/y/pattern1/pattern2/ transform заменить любые символы из шаблона pattern1 на соответствующие символы из pattern2, в указанном диапазоне строк

(эквивалент команды tr)

g global Операция выполняется над всеми найденными соответствиями внутри каждой из заданных строк

Без оператора g (global), операция замены будет производиться только для первого найденного совпадения, с заданным шаблоном, в каждой строке.

В отдельных случаях, операции sed необходимо заключать в кавычки.

sed -e '/^$/d' $filename # Ключ -e говорит о том, что далее следует строка, которая должна интерпретироваться #+ как набор инструкций редактирования. # (При передаче одной инструкции, ключ "-e" является необязательным.) # "Строгие" кавычки ('') предотвращают интерпретацию символов регулярного выражения, #+ как специальных символов, командным интерпретатором. # # Действия производятся над строками, содержащимися в файле $filename.

В отдельных случаях, команды редактирования не работают в одиночных кавычках.

filename=file1.txt pattern=BEGIN

sed "/^$pattern/d" "$filename" # Результат вполне предсказуем. # sed '/^$pattern/d' "$filename" дает иной результат. # В данном случае, в "строгих" кавычках (' ... '), #+ не происходит подстановки значения переменной "$pattern".

Sed использует ключ -e для того, чтобы определить, что следующая строка является инструкцией, или набором инструкций, редактирования. Если инструкция является единственной, то использование этого ключа не является обязательным.

<


Содержание  Назад  Вперед