sed
i awk
są nadzbiorem grep
, są rzeczy, które łatwiej zrobić z jednym lub drugim.
grep foo
można napisać sed '/foo/!d'
lub awk /foo/
, ale rozważ:
grep -i foo
musiałoby tak być, sed '/[fF][oO][oO]/!d'
chyba że chcesz rozważyć niestandardowe rozszerzenia, takie jak GNU sed '/foo/I!d'
. Lub awk
: awk 'tolower($0) ~ /foo/'
lub ponownie używając rozszerzenia GNU: awk -v IGNORECASE=1 /foo/
.
Rzeczy, w których różne narzędzia są dobre i niewygodne w przypadku innych narzędzi:
grep
grep
jest prostym narzędziem, ale ma bardzo wyspecjalizowane tryby działania, które są trudniejsze do odtworzenia za pomocą awk
lub sed
:
grep -i
dopasowanie bez rozróżniania wielkości liter (patrz wyżej)
grep -Fe "$string"
do stałego wyszukiwania ciągów ( export string; awk 'index($0, ENVIRON["string"])'
z awk
, brak bezpośredniego odpowiednika z sed
).
- (niestandardowe)
grep -r
dla wyszukiwania rekurencyjnego
- (niestandardowe)
grep -P
/ pcregrep
dla wyrażeń regularnych podobnych do Perla (niektóre sed
implementacje mają obsługę wyrażeń regularnych podobnych do Perla, choć nie te najważniejsze)
- (niestandardowy),
grep -o
aby zwrócić dopasowaną część (kilka wierszy awk
lub sed
zrobić to samo)
- (niestandardowe),
grep -A/B/C
aby zwrócić kontekst wokół meczu (ponownie bolesne robić w podobny sposób z sed
lub awk
)
sed
s/foo/bar/
: sed
„S s
komenda posiada cechy, które są trudne do wdrożenia w awk
takich jak:
s/foo\(.*\)bar/\1/g
: przechwytywanie (chociaż GNU awk ma do tego gensub()
rozszerzenie)
s/foo/bar/3
: zastąp 3. wystąpienie w każdej linii
- (niestandardowy): edycja plików w miejscu (choć jest teraz obsługiwana także przez GNU
awk
).
awk
awk
jest najbardziej bogaty w funkcje spośród wszystkich trzech.
- dobre do radzenia sobie z liczbami
- dobre do radzenia sobie z danymi wejściowymi sformatowanymi w kolumnach.
- dobre do wyodrębniania i łączenia danych z różnych źródeł za pomocą tablic asocjacyjnych.
perl
perl
jako praktyczne narzędzie do ekstrakcji i raportowania ma to, co najlepsze. Właśnie po to został pierwotnie zaprojektowany (jako narzędzie, które sprawia, że wszystkie te sed
/ awk
stają się przestarzałe).
Opanowanie perl
do przetwarzania tekstu daje poważną przewagę. Polecam poświęcić temu trochę czasu, nawet zanim przyjrzymy się na przykład mniej popularnym sed
poleceniom.
występ
Zasadą jest, że im bardziej wyspecjalizowane narzędzie, tym bardziej wydajne jest to zadanie. Ale to również bardzo zależy od wdrożenia, zadania i kilku innych czynników, a wydajność może mieć kompromisy, które mogą wymagać wzięcia pod uwagę.
Na przykład istnieją pewne grep
lub sed
implementacje, które są bardzo szybkie, ale na przykład nie obsługują znaków wielobajtowych, więc mogą działać poprawnie tylko na tekstach w języku amerykańskim i angielskim w lokalizacjach wielobajtowych. Lub są szybkie, ponieważ działają na małym buforze o stałej długości, a zatem nie mogą działać na dowolnych danych wejściowych ...