sed
und awk
sind Obermengen von grep
, gibt es Dinge, die leichter mit dem einen oder anderen zu tun sind.
grep foo
kann geschrieben werden sed '/foo/!d'
oder awk /foo/
, aber beachten Sie:
grep -i foo
Es müsste sein, sed '/[fF][oO][oO]/!d'
wenn Sie nicht-standardmäßige Erweiterungen wie GNUs in Betracht ziehen möchten sed '/foo/I!d'
. Oder mit awk
: awk 'tolower($0) ~ /foo/'
oder wieder eine GNU - Erweiterung mit: awk -v IGNORECASE=1 /foo/
.
Dinge, in denen die verschiedenen Werkzeuge gut sind und die mit den anderen Werkzeugen umständlich sind:
grep
grep
ist ein einfaches Werkzeug, verfügt jedoch über sehr spezielle Betriebsmodi, die schwerer zu reproduzieren sind, awk
oder sed
:
grep -i
für case insensitive matching (siehe oben)
grep -Fe "$string"
für die Suche nach festen Zeichenfolgen ( export string; awk 'index($0, ENVIRON["string"])'
mit awk
, keine direkte Entsprechung mit sed
).
- (Nicht-Standard)
grep -r
für die rekursive Suche
- (Nicht-Standard)
grep -P
/ pcregrep
für perlähnliche reguläre Ausdrücke (einige sed
Implementierungen unterstützen perlähnliche reguläre Ausdrücke, jedoch nicht die wichtigsten)
- (Nicht-Standard)
grep -o
, um den übereinstimmenden Teil zurückzugeben (mehrere Zeilen awk
oder sed
dasselbe zu tun)
- (Nicht - Standard)
grep -A/B/C
zur Rückkehr Kontext rund um das Spiel (wieder schmerzhaft in ähnlicher Weise zu tun , mit sed
oder awk
)
sed
s/foo/bar/
: sed
's s
Befehl hat Funktionen, die schwer zu implementieren sind, awk
wie:
s/foo\(.*\)bar/\1/g
: capturing (obwohl GNU awk dafür eine gensub()
Erweiterung hat)
s/foo/bar/3
: Ersetze das 3. Vorkommen in jeder Zeile
- (Nicht-Standard): In-Place-Bearbeitung von Dateien (obwohl es
awk
jetzt auch von GNU unterstützt wird ).
awk
awk
ist die am meisten funktionsreiche der drei.
- gut für den umgang mit zahlen
- Gut für den Umgang mit in Spalten formatierten Eingaben.
- Gut zum Extrahieren und Kombinieren von Daten aus verschiedenen Quellen mit ihren assoziativen Arrays.
perl
perl
Als praktisches Extraktions- und Reporting-Tool hat es das Beste von allen. Dafür wurde es ursprünglich entwickelt (um das Werkzeug zu sein, das all diese sed
/ awk
obsolet macht).
Das Beherrschen perl
der Textverarbeitung ist ein großer Vorteil. Ich würde empfehlen, etwas Zeit damit zu verbringen, bevor Sie sich sed
zum Beispiel die weniger verbreiteten Befehle ansehen.
Performance
Als Faustregel gilt, je spezialisierter das Werkzeug ist, desto effizienter ist es bei der Aufgabe. Dies hängt jedoch auch sehr stark von der Implementierung, der Aufgabe und einigen anderen Faktoren und der Leistung ab. Dies kann zu Kompromissen führen, die möglicherweise berücksichtigt werden müssen.
Zum Beispiel gibt es einige grep
oder sed
Implementierungen, die sehr schnell sind, aber zum Beispiel keine Multibyte-Zeichen unterstützen, so dass nur US-englischer Text in Mehrbyte-Gebietsschemata korrekt verarbeitet werden kann. Oder sie sind schnell, weil sie mit einem kleinen Puffer fester Länge arbeiten und daher keine willkürlichen Eingaben verarbeiten können ...