Различия между grep, awk и sed

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

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

Ответ 1

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

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

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

Awk

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

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

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

Я рекомендую вам прочитать эту книгу: Sed and Awk: 2nd Ed.

Это поможет вам стать опытным пользователем sed/awk в любой unix-подобной среде.

Ответ 2

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

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

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

Ответ 3

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

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

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

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

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