GNU/Linux >> Linux Esercitazione >  >> Linux

Quali sono le differenze tra grep, awk e sed?

Voglio solo menzionare una cosa, ci sono molti strumenti che possono eseguire l'elaborazione del testo, ad esempio sort, cut, split, join, paste, comm, uniq, column, rev, tac, tr, nl, pr, head, tail... ..

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:impara solo grep , sed e awk. con questi tre strumenti, puoi risolvere quasi il 99% dei problemi di elaborazione del testo e non è necessario memorizzare più di diversi cmd e opzioni. :)

E, se hai imparato e utilizzato i tre, sapevi la differenza. In realtà, la differenza qui significa quale strumento è adatto a risolvere quale tipo di problema.

un modo più pigro potrebbe essere imparare un linguaggio di scripting (python, perl o ruby) ed eseguire ogni elaborazione del testo con esso.


Breve definizione:

grep :cerca 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 diversi da grep .awk e sed sono processori di testo. Non solo hanno la capacità di trovare ciò che stai cercando nel testo, ma hanno anche la capacità di rimuovere, aggiungere e modificare il testo (e molto altro).

awk è utilizzato principalmente per l'estrazione e la creazione di report di dati. sed è un editor di flusso
Ognuno di loro 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:
Calcola somma/media/max/min/ecc. 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

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

Ti aiuterà a diventare un abile utente sed/awk in qualsiasi ambiente simile a unix.


Grep è utile se vuoi cercare rapidamente le righe che corrispondono in un file. Può anche restituire alcune altre semplici informazioni come i numeri di riga corrispondenti, il conteggio delle corrispondenze e gli elenchi di nomi di file.

Awk è un intero linguaggio di programmazione basato sulla lettura di file in stile CSV, sull'elaborazione dei record e, facoltativamente, sulla stampa di un set di dati dei risultati. Può fare molte cose ma non è lo strumento più facile 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 i risultati. È meno espressivo di awk ma ciò lo rende un uso un po' più semplice per compiti semplici. Ha molti operatori più complicati che puoi usare (penso che sia persino completo), ma in generale non utilizzerai queste funzionalità.


Linux
  1. Quali sono le differenze fondamentali tra il mainstream * nix Shells??

  2. Quali sono gli usi legittimi del comando `touch`?

  3. pfSense vs Netgear router:quali sono le differenze principali?

  4. Fedora vs Ubuntu:quali sono le differenze principali?

  5. Quali comandi sono disponibili nella sezione %pre di un file Kickstart su CentOS?

Cassandra vs MongoDB - Quali sono le differenze?

Terraform vs Kubernetes:quali sono le differenze

Docker ADD vs. COPY:quali sono le differenze?

IMAP vs POP3 vs SMTP:quali sono le differenze?

Come eliminare le righe vuote nei file utilizzando Grep, Sed e Awk

useradd vs. adduser:quali sono le differenze?