Sed использует ключ -e для того, чтобы определить, что следующая строка является инструкцией, или набором инструкций, редактирования. Если инструкция является единственной, то использование этого ключа не является обязательным.
sed -n '/xzy/p' $filename
# Ключ -n заставляет sed вывести только те строки, которые совпадают с указанным шаблоном.
# В противном случае (без ключа -n), будут выведены все строки.
# Здесь, ключ -e не является обязательным, поскольку здесь стоит единственная команда.
Таблица B-2. Примеры операций в sed
Операция |
Описание |
8d |
Удалить 8-ю строку. |
/^$/d |
Удалить все пустые строки. |
1,/^$/d |
Удалить все строки до первой пустой строки, включительно. |
/Jones/p |
Вывести строки, содержащие "Jones" (с ключом -n). |
s/Windows/Linux/ |
В каждой строке, заменить первое встретившееся слово "Windows" на слово "Linux". |
s/BSOD/stability/g |
В каждой строке, заменить все встретившиеся слова "BSOD" на "stability". |
s/ *$// |
Удалить все пробелы в конце каждой строки. |
s/00*/0/g |
Заменить все последовательности ведущих нулей одним символом "0". |
/GUI/d |
Удалить все строки, содержащие "GUI". |
s/GUI//g |
Удалить все найденные "GUI", оставляя остальную часть строки без изменений. |
Замена строки пустой строкой, эквивалентна удалению части строки, совпадающей с шаблоном. Остальная часть строки остается без изменений. Например, s/GUI//, изменит следующую строку
The most important parts of any application are its GUI and sound effects
на
The most important parts of any application are its and sound effects
Символ обратного слэша представляет символ перевода строки, как символ замены. В этом случае, замещающее выражение продолжается на следующей строке.
s/^ */\
/g
Эта инструкция заменит начальные пробелы в строке на символ перевода строки. Ожидаемый результат -- замена отступов в начале параграфа пустыми строками.
Указание диапазона строк, предшествующее одной, или более, инструкции может потребовать заключения инструкций в фигурные скобки, с соответствующими символами перевода строки.
/[0-9A-Za-z]/,/^$/{
/^$/d
}
В этом случае будут удалены только первые из нескольких, идущих подряд, пустых строк. Это может использоваться для установки однострочных интервалов в файле, оставляя, при этом, пустые строки между параграфами.
Быстрый способ установки двойных межстрочных интервалов в текстовых файлах -- sed G filename.
Примеры использования sed в сценариях командной оболочки, вы найдете в:
1. Пример 33-1
2. Пример 33-2
3. Пример 12-2
4. Пример A-3
5. Пример 12-12
6. Пример 12-20
7. Пример A-13
8. Пример A-19
9. Пример 12-24
10. Пример 10-9
11. Пример 12-33
12. Пример A-2
13. Пример 12-10
14. Пример 12-8
15. Пример A-11
16. Пример 17-11
Ссылки на дополнительные сведения о sed, вы найдете в разделе Литература .
Awk-- это полноценный язык обработки текстовой информации с синтаксисом, напоминающим синтаксис языка C. Он обладает довольно широким набором возможностей, однако, мы рассмотрим лишь некоторые из них -- наиболее употребимые в сценариях командной оболочки.
Awk "разбивает" каждую строку на отдельные поля . По-умолчанию, поля -- это последовательности символов, отделенные друг от друга пробелами, однако имеется возможность назначения других символов, в качестве разделителя полей. Awk анализирует и обрабатывает каждое поле в отдельности. Это делает его идеальным инструментом для работы со структурированными текстовыми файлами, осбенно с таблицами.
Внутри сценариев командной оболочки, код awk, заключается в "строгие" (одиночные) кавычки и фигурные скобки.
awk '{print $3}' $filename
# Выводит содержимое 3-го поля из файла $filename на устройство stdout.
awk '{print $1 $5 $6}' $filename
# Выводит содержимое 1-го, 5-го и 6-го полей из файла $filename.
Только что, мы рассмотрели действие команды print. Еще, на чем мы остановимся -- это переменные. Awk работает с переменными подобно сценариям командной оболочки, но более гибко.
{ total += ${column_number} }
Эта команда добавит содержимое переменной column_number к переменной "total". Чтобы, в завершение вывести "total", можно использовать команду END, которая открывает блок кода, отрабатывающий после того, как будут обработаны все входные данные.
END { print total }
Команде END, соответствует команда BEGIN, которая открывает блок кода, отрабатывающий перед началом обработки входных данных.
Читать дальше