sedи awkесть надмножества grep, есть вещи, которые легче сделать с одним или другим.
grep fooможно написать sed '/foo/!d'или awk /foo/, но рассмотрим:
grep -i fooдолжно быть, sed '/[fF][oO][oO]/!d'если вы не хотите рассматривать нестандартные расширения, такие как GNU sed '/foo/I!d'. Или с awk: awk 'tolower($0) ~ /foo/'или снова с помощью расширения GNU: awk -v IGNORECASE=1 /foo/.
Вещи, в которых разные инструменты хороши и громоздки с другими инструментами:
Grep
grepэто простой инструмент, но имеет очень специализированные режимы работы, которые сложнее воспроизвести с помощью awkили sed:
grep -i для сопоставления без учета регистра (см. выше)
grep -Fe "$string"для поиска по фиксированной строке ( export string; awk 'index($0, ENVIRON["string"])'с awk, без прямого эквивалента с sed).
- (нестандартный)
grep -rдля рекурсивного поиска
- (нестандартный)
grep -P/ pcregrepдля sedрегулярных выражений типа perl (некоторые реализации имеют поддержку регулярных выражений типа perl, хотя и не самые основные)
- (нестандартный),
grep -oчтобы вернуть совпавшую часть (несколько строк awkили sedсделать то же самое)
- (нестандартно)
grep -A/B/Cдля возврата контекста вокруг матча (опять же больно делать аналогичным образом с sedили awk)
СЭД
s/foo/bar/Команда : sed's sимеет функции, которые трудно реализовать, awkнапример:
s/foo\(.*\)bar/\1/g: capturing (хотя в GNU awk есть gensub()для этого расширение)
s/foo/bar/3: заменить 3-е вхождение в каждой строке
- (нестандартный): редактирование файлов на месте (хотя теперь оно также поддерживается GNU
awk).
AWK
awk является наиболее функциональным из трех.
- хорошо для работы с числами
- хорошо для работы с вводом, отформатированным в столбцах.
- хорошо для извлечения и объединения данных из разных источников, с его ассоциативными массивами.
Perl
perlв качестве практического инструмента извлечения и отчетности имеет лучшее из всех. Это то, что он был изначально разработан для (чтобы быть инструментом , который делает все те sed/ awkустаревшие).
Умение perlвыполнять обработку текста дает серьезное преимущество. Я бы посоветовал потратить на это некоторое время, даже прежде чем, например, взглянуть на менее распространенные sedкоманды.
производительность
Как правило, чем более специализирован инструмент, тем эффективнее он выполняет свою задачу. Но это также очень сильно зависит от реализации, задачи и некоторых других факторов и производительности могут иметь компромиссы, которые, возможно, необходимо принимать во внимание.
Например, есть некоторые grepили sedочень быстрые реализации, но, например, они не поддерживают многобайтовые символы, поэтому могут корректно работать только с англо-американским текстом в многобайтовых локалях. Или они быстрые, потому что работают с небольшим буфером фиксированной длины и, следовательно, не могут работать с произвольным вводом ...