sedund awksind Obermengen von grep, gibt es Dinge, die leichter mit dem einen oder anderen zu tun sind.
grep fookann geschrieben werden sed '/foo/!d'oder awk /foo/, aber beachten Sie:
grep -i fooEs 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
grepist ein einfaches Werkzeug, verfügt jedoch über sehr spezielle Betriebsmodi, die schwerer zu reproduzieren sind, awkoder 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 -rfür die rekursive Suche
- (Nicht-Standard)
grep -P/ pcregrepfür perlähnliche reguläre Ausdrücke (einige sedImplementierungen unterstützen perlähnliche reguläre Ausdrücke, jedoch nicht die wichtigsten)
- (Nicht-Standard)
grep -o, um den übereinstimmenden Teil zurückzugeben (mehrere Zeilen awkoder seddasselbe zu tun)
- (Nicht - Standard)
grep -A/B/Czur Rückkehr Kontext rund um das Spiel (wieder schmerzhaft in ähnlicher Weise zu tun , mit sedoder awk)
sed
s/foo/bar/: sed's sBefehl hat Funktionen, die schwer zu implementieren sind, awkwie:
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
awkjetzt 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
perlAls 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/ awkobsolet macht).
Das Beherrschen perlder Textverarbeitung ist ein großer Vorteil. Ich würde empfehlen, etwas Zeit damit zu verbringen, bevor Sie sich sedzum 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 grepoder sedImplementierungen, 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 ...