Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #73, ЯНВАРЬ 2005 г.

Поставь все на конвейер!

j1m (j1m@list.ru)

Хакер, номер #073, стр. 073-100-2


Найдется все!

Назначение утилиты grep(1) - поиск в текстовых файлах. Он выдает все строки, содержащие образец поиска. Например команда

$ ls | grep .txt

покажет имена файлов с расширением .txt. В качестве образца поиска можно использовать регулярное выражение. Некоторые полезные флаги: -E - использовать расширенные регулярные выражения (egrep является синонимом grep –E), -i - игнорировать регистр букв, -v - выводить строки, не соответствующие образцу, -n - выводить номера строк, -f - читать образец поиска из файла, --color - подсвечивать совпадения.

Долой интерактивность!

Ты видел редактор без интерфейса и вообще без интерактивного общения с пользователем? Нет? Ты многое потерял, тебе просто необходимо познакомиться с sed(1). Потоковый редактор sed предназначен для редактирования текста на лету. Он читает входной поток, выполняет необходимые преобразования в соответствии с указанными командами и записывает результат в выходной поток. Sed управляется командами, многим из которых может предшествовать адрес (номер строки или регулярное выражение, заключенное в «/») или диапазон адресов (два номера строки, разделенные запятой), последняя строка адресуется с помощью символа «$». Любая команда может быть задана без указания адреса, в этом случае она будет применена ко всем строкам. Чтобы не запутаться, команды, принимающие адреса, я буду предварять знаком «[x]», а команды, принимающие адреса или диапазоны адресов, знаком «[x,x]». Так что же можно сделать с помощью sed?

1. Его удобно использовать для замены слов в тексте с помощью команды [x,x] s/регулярное_выражение/замена/флаги. Например команда

$ cat file.txt | sed 's/UNIX/Linux/g' > file2.txt

заменит все слова UNIX на Linux и запишет результат в file2.txt. Флаг g нужен, если слово UNIX встречается несколько раз в одной строке.

2. Добавлять произвольную строку в поток командой [x]a\. Команда

$ cat file.txt | sed '10a\Здесь был я.'

вставит строку «Здесь был я.» после десятой строки.

3. Заменять произвольные строки командой [x]i\, которая работает подобно команде [x]a\.

4. Удалять строки командой [x,x]d:

$ cat file.txt | sed '10,$d'

$ cat file.txt | sed '/Windows/d'

Первая команда удалит строки с десятой до последней, а вторая - все строки, содержащие слово «Windows».

5. Добавлять содержимое другого файла в поток командой [x]r файл.

6. Использовать вместо tr. Для этого есть команда [x]y/источник/цель/ (эквивалент: tr источник цель).

7. Использовать вместо head:

$ cat file.txt | sed 10q

Команда [x]q приводит к немедленному завершению работы sed. Поэтому в приведенном примере напечатается только десять первых строк, а на десятой строке произойдет выход из редактора.

Назад на стр. 073-100-1  Содержание  Вперед на стр. 073-100-3