2011-10-11 15 views

Odpowiedz

125

Krótka definicja:

grep szukaj konkretnych terminów w pliku

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

Teraz awk i sed są zupełnie inaczej niż grep. awk i sed są procesorami tekstu. Nie tylko potrafią znaleźć to, czego szukacie w tekście, ale także potrafią usuwać, dodawać i modyfikować tekst (i wiele więcej).

awk służy głównie do ekstrakcji danych i raportowania. sed jest edytorem strumieniowym
Każdy z nich ma swoją własną funkcjonalność i specjalności.

Przykład
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 

podstawowe awk zastosowanie:
Oblicz sumę/średnia/max/min/itp. czegokolwiek możesz potrzebować.

$ 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 

Polecam lekturę tej książki: Sed & Awk: 2nd Ed.

To pomoże Ci stać się biegły użytkownik sed/awk na dowolnym uniksopodobnego środowiska.

37

Grep jest przydatny, jeśli chcesz szybko wyszukać wiersze pasujące do pliku. Może również zwracać inne proste informacje, takie jak pasujące numery linii, liczba meczów i listy nazw plików.

Awk to cały język programowania zbudowany wokół odczytu plików w stylu CSV, przetwarzania rekordów i opcjonalnie drukowania zestawu danych wyników. Może robić wiele rzeczy, ale nie jest to najprostsze narzędzie do prostych zadań.

Sed jest przydatna, gdy chcesz dokonać zmian w pliku na podstawie wyrażeń regularnych. Pozwala łatwo dopasować części linii, dokonać modyfikacji i wydrukować wyniki. Jest mniej ekspresywny niż awk, ale pozwala na nieco łatwiejsze użycie do prostych zadań. Ma wiele bardziej skomplikowanych operatorów, z których możesz korzystać (myślę, że to jeszcze nie koniec), ale generalnie nie użyjesz tych funkcji.

+1

Można wyszukiwać wiersze w pliku z AWK tak szybko, jak z Grep. To pierwszy opisany tutaj przypadek: [grep vs awk: 10 przykładów wyszukiwania wzorca (theunixschool)] (http://www.theunixschool.com/2012/09/grep-vs-awk-examples- for-pattern-search. html). – Hibou57

24

Po prostu chcę o czymś wspomnieć, istnieje wiele narzędzi do przetwarzania tekstu, np. sortuj, wycinaj, dziel, łącz, wklej, comm, unik, kolumna, rev, tac, tr, nl, pr, głowa, ogon .....

są bardzo przydatne, ale musisz nauczyć się ich opcji itd.

Leniwa droga (nie najlepsza) do nauki przetwarzania tekstu może być: tylko nauka grep, sed i awk. dzięki tym trzem narzędziom możesz rozwiązać prawie 99% problemów z przetwarzaniem tekstu i nie musisz zapamiętywać powyżej różnych cmd i opcji. :)

ORAZ, jeśli nauczyłeś się i użyłeś tej trójki, znałeś różnicę. W rzeczywistości różnica tutaj oznacza, które narzędzie jest dobre w rozwiązywaniu jakiego problemu.

bardziej leniwym sposobem może być uczenie się języka skryptowego (python, perl lub ruby) i wykonywanie każdego przetwarzania tekstu za jego pomocą.

+2

Zależy od złożoności zadania, aby pominąć dopasowywanie wzorca. Jeśli istnieje dużo logiki poza magią wzorców, Python będzie lepszym rozwiązaniem, jeśli otaczająca logika jest prostsza, SEd/Grep/AWK. – Hibou57

+1

Właściwie, po takim rozumowaniu, możesz polecić, aby nauczyć się i używać awk, ponieważ może on zrobić większość tego, co potrafi sed i grep. –

Powiązane problemy