Каковы различия между grep, awk & sed? [дубликат]

Возможные Дубликаты:
каковы различия между Perl, Python, AWK и sed?
в чем разница между sed и awk?

может быть, не очень конкретный вопрос, но я смущен различиями между grep, awk и sed С точки зрения их роли в администрировании системы Unix/Linux и обработке текста.

3 ответов


короткое определение:

grep: поиск определенных терминов в файле

#usage
$ grep This file.txt
Every line containing "This"
Every line containing "This"
Every line containing "This"
Every line containing "This"

$ cat file.txt
Every line containing "This"
Every line containing "This"
Every line containing "That"
Every line containing "This"
Every line containing "This"

теперь awk и sed полностью отличаются от grep. awk и sed текстовые процессоры. Они не только имеют возможность найти то, что вы ищете в тексте, они имеют возможность удалить, добавить и изменить текст, а также (и многое другое).

awk в основном используется для извлечения данных и составления отчетов. sed поток редактор
Каждый из них имеет свою функциональность и специальность.

пример
Сед

$ sed -i 's/cat/dog/' file.txt
# this will replace any occurrence of the characters 'cat' by 'dog'

на awk

$ awk '{print }' file.txt
# this will print the second column of file.txt

Basic awk использование:
Вычислить сумму / среднее / max/min / etc. что вам может понадобиться.

$ cat file.txt
A 10
B 20
C 60
$ awk 'BEGIN {sum=0; count=0; OFS="\t"} {sum+=; count++} END {print "Average:", sum/count}' file.txt
Average:    30

я рекомендую вам прочитать эту книгу: Sed & Awk: 2-е изд.

это поможет вам стать опытным пользователем sed/awk на любом unix-подобном окружающая среда.


Grep полезен, если вы хотите быстро искать строки, которые соответствуют в файле. Он также может возвращать некоторую другую простую информацию, такую как совпадающие номера строк, количество совпадений и списки имен файлов.

Awk-это целый язык программирования, построенный на чтении файлов в стиле CSV, обработке записей и, возможно, распечатке результирующего набора данных. Он может делать много вещей, но это не самый простой инструмент для использования для простых задач.

Sed полезно, когда вы хотите сделать изменения в файле на основе регулярных выражений. Это позволяет легко сопоставлять части линий, вносить изменения и распечатывать результаты. Он менее выразителен, чем awk, но это облегчает его использование для простых задач. У него есть много более сложных операторов, которые вы можете использовать (я думаю, что это даже turing complete), но в целом вы не будете использовать эти функции.


Я просто хочу упомянуть, что есть много инструментов, которые могут обрабатывать текст, например сортировать, вырезать, разделить, присоединиться, вставить, comm, uniq, столбец, rev, tac, tr, nl, pr, голова, хвост.....

Они очень удобны, но вы должны узнать их параметры и т. д.

ленивый способ (не лучший способ) изучить обработку текста может быть: только узнать grep , sed и awk. с помощью этих трех инструментов вы можете решить почти 99% проблем обработки текста и не нужно запоминать выше различных cmds и варианты. :)

и, если вы узнали и использовали три, вы знали разницу. На самом деле, разница здесь означает, какой инструмент хорош в решении какой проблемы.

более ленивым способом может быть изучение языка скриптов (python, perl или ruby) и выполнение каждой обработки текста с ним.