Когда использовать grep, less, awk, sed

Я вхожу в мир Linux, и на работе я все чаще использую grep . Делая это, я выясняю, что иногда это недостаточно для того, что я хочу.

Несколько дней назад я боролся с grep а мой коллега, старший администратор Linux, сказал мне использовать awk . Я был ошеломлен тем, как быстро я получил результат.

Итак, мой вопрос – когда вы выбираете использовать один над другим? Какие вопросы я могу задать себе перед тем, как работать с grep и потратить много времени, когда я мог бы сделать это с awk и сэкономить время?

One Solution collect form web for “Когда использовать grep, less, awk, sed”

sed и awk – это суперсеты grep , есть вещи, которые легче сделать с тем или другим.

grep foo можно записать sed '/foo/!d' или awk /foo/ , но подумайте:

grep -i foo должен быть sed '/[fF][oO][oO]/!d' если вы не хотите рассматривать нестандартные расширения, такие как sed '/foo/I!d' GNU. Или с 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 для perl-подобных регулярных выражений (некоторые реализации sed имеют perl-подобную поддержку регулярного выражения, но не самые основные)
  • (не стандартный) grep -o чтобы вернуть согласованную часть (несколько строк awk или sed чтобы сделать то же самое)
  • (не стандартный) grep -A/B/C чтобы вернуть контекст вокруг матча (опять же больно делать аналогичным образом с sed или awk )

СЕПГ

  • s/foo/bar/ : команда sed имеет функции, которые трудно реализовать в awk например:
  • s/foo\(.*\)bar/\1/g : захват (хотя GNU awk имеет расширение gensub() )
  • s/foo/bar/3 : заменить третье вхождение на каждую строку
  • (нестандартное): редактирование на месте (хотя оно также поддерживается GNU awk сейчас).

AWK

awk – самая многофункциональная из трех.

  • полезно для работы с цифрами
  • хорошо для обработки входных данных, отформатированных в столбцах.
  • хорошо для извлечения и объединения данных из разных источников, с его ассоциативными массивами.

Perl

perl как практический инструмент извлечения и отчетности имеет лучшее из всех. Это то, из чего он был изначально предназначен (чтобы быть инструментом, который делает все эти sed / awk устаревшими).

Освоение perl для обработки текста дает серьезное преимущество. Я бы рекомендовал потратить некоторое время на это, даже прежде чем смотреть на менее распространенные команды sed например.

представление

Как правило, чем более специализированный инструмент, тем эффективнее он находится в задаче. Но это также очень сильно зависит от реализации, задачи и нескольких других факторов и производительности могут иметь компромиссы, которые, возможно, необходимо принять во внимание.

Например, есть некоторые реализации grep или sed , которые очень быстрые, но, например, они не поддерживают многобайтовые символы, поэтому могут корректно работать только в англо-английском тексте в многобайтовых локалях. Или они быстры, потому что они работают на небольшом буфере фиксированной длины и, следовательно, не могут работать на произвольном вводе …

  • awk, вырезать символы из подстроки
  • Измените текст в теге, но только тег содержится в определенном блоке XML
  • Как я могу перечислить все строки после того, как два последующих шаблона будут сопоставлены, когда они не будут
  • sed заменяет только несколько регулярных выражений букв
  • Изменение пары ключей значений массива с использованием sed или замены шаблонов или расширения фигурных скобок?
  • grep для строк, которые были найдены в предыдущем заявлении
  • Сохранить файл после использования команды sed
  • Строка Keep, содержащая X в первых двух полях
  • Печать значения столбца в следующей строке
  • Sed и BBedit Html
  • Добавление соответствующих номеров в диапазон
  • Linux и Unix - лучшая ОС в мире.