it-swarm.com.de

Was sind die Unterschiede zwischen grep, awk & sed?

Mögliches Duplikat:
Was sind die Unterschiede zwischen Perl, Python, AWK und sed?
Was ist der Unterschied zwischen sed und awk?

Vielleicht keine sehr spezifische Frage, aber ich bin verwirrt über die Unterschiede zwischen grep, awk und sed hinsichtlich ihrer Rolle in der Unix/Linux-Systemadministration und der Textverarbeitung.

117
user288609

Kurzdefinition:

grep: Suche nach bestimmten Begriffen in einer Datei

#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"

Jetzt sind awk und sed völlig anders als grep. awk und sed sind Textverarbeitungsprogramme. Sie haben nicht nur die Möglichkeit zu finden, wonach Sie im Text suchen, sondern auch die Möglichkeit, den Text zu entfernen, hinzuzufügen und zu ändern (und vieles mehr).

awk wird hauptsächlich für die Datenextraktion und Berichterstellung verwendet. sed ist ein Streameditor
Jeder von ihnen hat seine eigenen Funktionen und Besonderheiten.

Beispiel
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

Grundlegende awk Verwendung:
Berechne Summe/Durchschnitt/Max/Min/etc. was auch immer Sie brauchen.

$ 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

Ich empfehle Ihnen, dieses Buch zu lesen: Sed & Awk: 2nd Ed.

Es wird Ihnen helfen, ein erfahrener sed/awk-Benutzer in einer unix-ähnlichen Umgebung zu werden.

173
aayoubi

Grep ist nützlich, wenn Sie schnell nach übereinstimmenden Zeilen in einer Datei suchen möchten. Es kann auch einige andere einfache Informationen wie übereinstimmende Zeilennummern, Übereinstimmungsanzahl und Dateinamenlisten zurückgeben.

Awk ist eine vollständige Programmiersprache, die darauf ausgelegt ist, CSV-Dateien zu lesen, die Datensätze zu verarbeiten und optional einen Ergebnisdatensatz auszudrucken. Es kann viele Dinge tun, ist jedoch nicht das einfachste Werkzeug für einfache Aufgaben.

Sed ist nützlich, wenn Sie Änderungen an einer Datei vornehmen möchten, die auf regulären Ausdrücken basieren. Sie können auf einfache Weise Teile von Linien zuordnen, Änderungen vornehmen und Ergebnisse ausdrucken. Es ist weniger ausdrucksstark als awk, erleichtert aber die Verwendung für einfache Aufgaben. Es gibt viel kompliziertere Operatoren, die Sie verwenden können (ich denke, es ist sogar vollständig), aber im Allgemeinen werden Sie diese Funktionen nicht verwenden.

51
Kurt Stutsman

Ich möchte nur eine Sache erwähnen, es gibt viele Werkzeuge, die Textverarbeitung durchführen können, z. sortieren, schneiden, teilen, verbinden, einfügen, comm, uniq, spalte, rev, tac, tr, nl, pr, kopf, schwanz .....

sie sind sehr praktisch, aber Sie müssen ihre Optionen usw. lernen.

Ein fauler Weg (nicht der beste Weg), um die Textverarbeitung zu lernen, könnte sein: Lernen Sie nur grep, sed und awk. Mit diesen drei Tools können Sie fast 99% der Textverarbeitungsprobleme lösen und müssen sich nicht mehr die verschiedenen Befehle und Optionen merken. :)

UND wenn du die drei gelernt und benutzt hast, kennst du den Unterschied. Tatsächlich bedeutet der Unterschied, welches Tool für welche Art von Problem geeignet ist.

ein faulerer Weg könnte darin bestehen, eine Skriptsprache (Python, Perl oder Ruby) zu lernen und jede Textverarbeitung damit durchzuführen.

32
Kent