Опция -s подавляет выдачу диагностических сообщений о том, что исходный файл не существует или не доступен на чтение.
Отметим, что опции -F и -q, каждая по-своему, ускоряют работу служебной программы grep: -F упрощает сопоставление, -q позволяет завершить действие после первого успешного сопоставления (и не обрабатывать оставшиеся строки и/или файлы). Сочетание опций -q и -s позволяет также более свободно задавать исходные файлы, не заботясь об их существовании и доступности.
Рассмотрим примеры использования утилиты grep. Для выборки пустых строк из файла стандартного ввода пригодны два шаблона:
grep ^$ grep -v .
Если нужно выбрать строки, имеющие вид abc или def, можно воспользоваться одной из трех команд:
grep -E '^abc$|^def$' grep -F -x 'abc def'
И наконец, пусть в файлах с исходными текстами Фортран-программ требуется найти все строки, содержащие вызовы подпрограмм и не являющиеся комментариями. Для такой выборки "в первом приближении" (учитывая нерегулярний синтаксис Фортрана) подойдет следующая команда:
grep -i '^[^C].* CALL ' *.for
В командных файлах для обработки текстов часто используется потоковый редактор sed:
sed [-n] сценарий [файл ...] sed [-n] [-e сценарий] ... [-f файл_сценария] ... [файл ...]
Редактор sed читает указанные текстовые файлы (по умолчанию - стандартный ввод), выполняет редактирование в соответствии с командами сценария и записывает результат на стандартный вывод. Смысл опций -e и -f аналогичен утилите grep. Опция -n подавляет подразумеваемый вывод и предписывает выдавать только явно отобранные строки.
Сценарий для sed состоит из редактирующих команд (каждая на отдельной строке), имеющих следующий формат:
[адрес [, адрес]] функция [аргумент ...]
Функция имеет здесь однобуквенное обозначение.
В нормальном режиме sed циклически выполняет следующие действия:
Некоторые команды используют хранилище, чтобы запомнить весь буфер или его часть для последующего применения.
Адрес в редактирующей команде sed - это либо десятичное число, означающее номер входной строки в совокупности входных файлов, либо символ $, который обозначает последнюю входную строку, либо контекстный адрес, имеющий вид /базовое_регулярное_выражение/. Контекстный адрес задает первую (начиная с текущей) из строк, успешно сопоставленных с БРВ при движении вперед.
Командная строка без адреса применима к любому буферу, командная строка с одним адресом - к буферу с соответствующим адресом, командная строка с двумя адресами - к буферам с адресами в диапазоне от первого до второго включительно; затем процесс повторяется, начиная с первой строки вслед за выбранным диапазоном.