Поставь все на конвейер! j1m (j1m@list.ru) Хакер, номер #073, стр. 073-100-3 8. Использовать вместо grep: $ cat file.txt | sed -n '/образец/p' По дефолту sed печатает все строки из входного потока в выходной, такое поведение можно изменить, используя флаг -n. Теперь печать строк можно задать только командой [x,x]p. В приведенном выше примере будут выведены только строки, совпадающие с образцом, что эквивалентно команде $ cat file.txt | grep образец 9. Применять приемы программирования. Можно написать небольшой сценарий для sed и сохранить его в файле. Внутри командного файла можно указывать метки и перемещаться между ними. К сожалению, эта тема выходит за рамки данной статьи. Sed может делать с текстом очень многое, для дальнейшего изучения советую почитать info-страницу. Найти и обработать Вот и добрались наши руки до одного из самых мощных и сложных инструментов, предназначенных для редактирования текста - awk. Это язык поиска и обработки шаблонов, по синтаксису он подобен языку C. В нем присутствует даже всеми любимая функция printf. Awk позиционировался авторами как более мощная замена sed, поэтому программы awk похожи на сценарии sed. Программа состоит из пар шаблон-действие, имеющих вид шаблон { действие } где шаблон может быть: отношением (<, > , ==, != и т.д.); регулярным выражением, заключенным в «/»; сопоставлением шаблону (~, !~); комбинацией всего перечисленного. Действие - это оператор или блок операторов, разделенных «;». Каждая входная строка сравнивается с шаблоном из каждой пары шаблон-действие. В каждой паре либо шаблон, либо действие может отсутствовать. В случае если не указан шаблон, действие выполняется для каждой входной строки. Если не указано действие, оно назначается по умолчанию - печать строки. После запуска программы все входные строки разбиваются на поля. Поля помещаются в переменные: $1, $2, $3 и т.д. Вся строка адресуется переменной $0. Пример: $ date | awk '{ print $4 }' В этом примере шаблон опущен. С помощью оператора print распечатывается четвертое поле. Без указания аргументов print распечатает всю строку. По дефолту в качестве разделителя полей используется пробел. Указать другой разделитель можно, используя флаг -F. Еще пример: $ cat /etc/passwd | awk -F: '/boris/ { print $3, $6 }' Эта команда напечатает uid (третье поле) и домашний каталог (шестое поле) пользователя с ником boris. Помимо $1, $2, $N, в awk имеется еще несколько встроенных переменных, самые важные из которых: FS - разделитель полей (используется вместо -F) OFS - разделитель полей в выходном потоке NF - общее число полей NR - номер текущей строки FILENAME - имя входного файла ARGC - количество аргументов командной строки ARGV - массив аргументов командной строки Помимо встроенных переменных, присутствуют также встроенные шаблоны: BEGIN и END. Действие шаблона BEGIN выполняется до начала чтения входного потока, а действие шаблона END - после прочтения последней строки потока. Теперь посмотрим, что нам дает использование встроенных переменных и шаблонов, для этого возьмем команду |