2011-10-11 21 views

risposta

125

definizione breve:

grep: ricerca di termini specifici in un file

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

Ora awk e sed sono completamente diverso da quello grep. awk e sed sono processori di testo. Non solo hanno la capacità di trovare ciò che stai cercando nel testo, ma anche la possibilità di rimuovere, aggiungere e modificare il testo (e molto altro).

awk viene utilizzato principalmente per l'estrazione e il reporting dei dati. sed è un editor di stream
Ognuno di essi ha le proprie funzionalità e specialità.

Esempio
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 

base awk utilizzo:
Compute somma/media/max/min/etc. di qualunque cosa tu possa aver bisogno.

$ 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 

vi consiglio di leggere questo libro: Sed & Awk: 2nd Ed.

Essa vi aiuterà a diventare un utente sed/awk abile in qualsiasi ambiente UNIX-like.

37

Grep è utile se si desidera cercare rapidamente le linee che corrispondono a un file. Può anche restituire alcune altre informazioni semplici come numeri di riga corrispondenti, numero di corrispondenze e elenchi di nomi di file.

Awk è un intero linguaggio di programmazione basato sulla lettura di file in stile CSV, l'elaborazione dei record e la stampa facoltativa di un set di dati dei risultati. Può fare molte cose ma non è lo strumento più semplice da usare per compiti semplici.

Sed è utile quando si desidera apportare modifiche a un file basato su espressioni regolari. Ti consente di abbinare facilmente parti di linee, apportare modifiche e stampare risultati. È meno espressivo di awk, ma questo lo rende più facile da usare per compiti semplici. Ha molti più complicati operatori che puoi usare (penso che sia anche completo), ma in generale non utilizzerai quelle funzionalità.

+1

Si può cercare una linea in un file con AWK tanto veloce quanto con Grep. Questo è il primo caso descritto qui: [grep vs awk: 10 esempi di ricerca pattern (theunixschool)] (http://www.theunixschool.com/2012/09/grep-vs-awk-examples-for-pattern-search. html). – Hibou57

24

Voglio solo menzionare una cosa, ci sono molti strumenti che possono eseguire l'elaborazione del testo, ad es. ordinare, tagliare, dividere, unire, incollare, comm, uniq, colonna, rev, tac, tr, nl, pr, testa, coda .....

sono molto utili ma devi imparare le loro opzioni ecc.

Un modo pigro (non il modo migliore) per imparare l'elaborazione del testo potrebbe essere: solo imparare grep, sed e awk. con questi tre strumenti, è possibile risolvere quasi il 99% dei problemi di elaborazione del testo e non è necessario memorizzare sopra diversi cmd e opzioni. :)

E, se hai imparato e usato i tre, conoscevi la differenza. In realtà, la differenza qui indica quale strumento è efficace nel risolvere il tipo di problema.

un modo più pigro potrebbe essere l'apprendimento di un linguaggio di script (python, perl o ruby) e ogni elaborazione di testo con esso.

+2

Dipende dalla complessità del lavoro da fare a parte la corrispondenza del modello. Se c'è molta logica oltre alla magia del pattern, Python sarà un'opzione migliore, se la logica circostante è più semplice, SEd/Grep/AWK. – Hibou57

+1

In realtà, seguendo questa linea di ragionamento potresti raccomandare di imparare e usare awk in quanto può fare la maggior parte di ciò che sed e grep possono fare. –