12 comandi utili per filtrare il testo per operazioni efficaci sui file in Linux
In questo articolo esamineremo una serie di strumenti da riga di comando che fungono da filtri in Linux. Un filtro è un programma che legge l'input standard, esegue un'operazione su di esso e scrive i risultati sullo standard output.
Per questo motivo, può essere utilizzato per elaborare le informazioni in modi potenti, ad esempio ristrutturando l'output per generare report utili, modificando il testo nei file e molte altre attività di amministrazione del sistema.
Detto questo, di seguito sono riportati alcuni dei filtri di file o testo utili in Linux.
1. Comando Awk
Awk è un notevole linguaggio di scansione ed elaborazione di modelli, può essere utilizzato per creare filtri utili in Linux. Puoi iniziare a usarlo leggendo la nostra serie Awk dalla Parte 1 alla Parte 13.
Inoltre, leggi anche la pagina man di awk per maggiori informazioni e opzioni di utilizzo:
man awk
2. Comando Sed
sed è un potente editor di flussi per filtrare e trasformare il testo. Abbiamo già scritto due articoli utili su sed, che puoi leggere qui:
- Come utilizzare il comando GNU "sed" per creare, modificare e manipolare file in Linux
- 15 utili suggerimenti e trucchi sul comando "sed" per le attività quotidiane di amministrazione del sistema Linux
La pagina man di sed ha aggiunto opzioni di controllo e istruzioni:
man sed
3. Comandi Grep, Egrep, Fgrep, Rgrep
Questi filtri producono linee che corrispondono a un determinato modello. Leggono le righe da un file o da un input standard e stampano tutte le righe corrispondenti per impostazione predefinita sullo standard output.
Nota: il programma principale è grep, le varianti sono semplicemente le stesse dell'utilizzo di opzioni grep specifiche come di seguito (e vengono ancora utilizzate per compatibilità con le versioni precedenti):
egrep = grep -E
fgrep = grep -F
rgrep = grep -r
Di seguito sono riportati alcuni comandi grep di base:
tecmint@TecMint ~ $ grep "aaronkilik" /etc/passwd
aaronkilik:x:1001:1001::/home/aaronkilik:
tecmint@TecMint ~ $ cat /etc/passwd | grep "aronkilik"
aaronkilik:x:1001:1001::/home/aaronkilik:
Puoi leggere di più su Qual è la differenza tra Grep, Egrep e Fgrep in Linux?.
4. Comando capo
head viene utilizzato per visualizzare le prime parti di un file, per impostazione predefinita restituisce le prime 10 righe. Puoi utilizzare il flag -n
num per specificare il numero di righe da visualizzare:
tecmint@TecMint ~ $ head /var/log/auth.log
Jan 2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session closed for user root
Jan 2 10:51:34 TecMint sudo: tecmint : TTY=unknown ; PWD=/home/tecmint ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py
Jan 2 10:51:34 TecMint sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan 2 10:51:39 TecMint sudo: pam_unix(sudo:session): session closed for user root
Jan 2 10:55:01 TecMint CRON[4099]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 2 10:55:01 TecMint CRON[4099]: pam_unix(cron:session): session closed for user root
Jan 2 11:05:01 TecMint CRON[4138]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 2 11:05:01 TecMint CRON[4138]: pam_unix(cron:session): session closed for user root
Jan 2 11:09:01 TecMint CRON[4146]: pam_unix(cron:session): session opened for user root by (uid=0)
tecmint@TecMint ~ $ head -n 5 /var/log/auth.log
Jan 2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session closed for user root
Jan 2 10:51:34 TecMint sudo: tecmint : TTY=unknown ; PWD=/home/tecmint ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py
Jan 2 10:51:34 TecMint sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan 2 10:51:39 TecMint sudo: pam_unix(sudo:session): session closed for user root
Scopri come utilizzare il comando head con i comandi tail e cat per un utilizzo efficace in Linux.
5. Comando di coda
tail restituisce le ultime parti (10 righe per impostazione predefinita) di un file. Utilizza l'opzione -n
num per specificare il numero di righe da visualizzare.
Il comando seguente genererà le ultime 5 righe del file specificato:
tecmint@TecMint ~ $ tail -n 5 /var/log/auth.log
Jan 6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan 6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
Jan 6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan 6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan 6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
Inoltre, tail ha un'opzione speciale -f
per osservare le modifiche in un file in tempo reale (specialmente i file di registro).
Il seguente comando ti consentirà di monitorare le modifiche nel file specificato:
tecmint@TecMint ~ $ tail -f /var/log/auth.log
Jan 6 12:58:01 TecMint sshd[1269]: Server listening on :: port 22.
Jan 6 12:58:11 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan 6 12:58:12 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan 6 12:58:12 TecMint sshd[1269]: Server listening on :: port 22.
Jan 6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan 6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan 6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
Jan 6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan 6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan 6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
Leggi la pagina man coda per un elenco completo delle opzioni di utilizzo e delle istruzioni:
man tail
6. comando di ordinamento
sort viene utilizzato per ordinare le righe di un file di testo o dall'input standard.
Di seguito è riportato il contenuto di un file denominato domains.list:
tecmint@TecMint ~ $ cat domains.list
linux-console.net
linux-console.net
news.linux-console.net
news.linux-console.net
linuxsay.com
linuxsay.com
windowsmint.com
windowsmint.com
Puoi eseguire un semplice comando sort per ordinare il contenuto del file in questo modo:
tecmint@TecMint ~ $ sort domains.list
linuxsay.com
linuxsay.com
news.linux-console.net
news.linux-console.net
linux-console.net
linux-console.net
windowsmint.com
windowsmint.com
Puoi utilizzare il comando sort in molti modi, consulta alcuni degli articoli utili sul comando sort come segue:
- 14 esempi utili del comando "sort" di Linux - Parte 1
- 7 Interessanti esempi di comandi Linux "sort" - Parte 2
- Come trovare e ordinare i file in base alla data e all'ora della modifica
- Come ordinare l'output del comando "ls" in base alla data e all'ora dell'ultima modifica
7. Comando uniq
Il comando uniq viene utilizzato per segnalare o omettere righe ripetute, filtra le righe dall'input standard e scrive il risultato sullo standard output.
Dopo aver eseguito sort su un flusso di input, puoi rimuovere le righe ripetute con uniq come nell'esempio seguente.
Per indicare il numero di occorrenze di una riga, utilizza l'opzione -c
e ignora le differenze tra maiuscole e minuscole durante il confronto includendo l'opzione -i
:
tecmint@TecMint ~ $ cat domains.list
linux-console.net
linux-console.net
news.linux-console.net
news.linux-console.net
linuxsay.com
linuxsay.com
windowsmint.com
tecmint@TecMint ~ $ sort domains.list | uniq -c
2 linuxsay.com
2 news.linux-console.net
2 linux-console.net
1 windowsmint.com
Leggi la pagina man uniq per ulteriori informazioni sull'utilizzo e flag:
man uniq
8. Comando fmt
fmt semplice formattatore di testo ottimale, riformatta i paragrafi nel file specificato e stampa i risultati sullo standard output.
Quello che segue è il contenuto estratto dal file domain-list.txt:
1.linux-console.net 2.news.linux-console.net 3.linuxsay.com 4.windowsmint.com
Per riformattare il contenuto di cui sopra in un elenco standard, esegui il seguente comando con l'opzione -w
utilizzata per definire la larghezza massima della linea:
tecmint@TecMint ~ $ cat domain-list.txt
1.linux-console.net 2.news.linux-console.net 3.linuxsay.com 4.windowsmint.com
tecmint@TecMint ~ $ fmt -w 1 domain-list.txt
1.linux-console.net
2.news.linux-console.net
3.linuxsay.com
4.windowsmint.com
9.pr Comando
Il comando pr converte file di testo o input standard per la stampa. Ad esempio, sui sistemi Debian, puoi elencare tutti i pacchetti installati come segue:
dpkg -l
Per organizzare l'elenco in pagine e colonne pronte per la stampa, eseguire il comando seguente.
tecmint@TecMint ~ $ dpkg -l | pr --columns 3 -l 20
2017-01-06 13:19 Page 1
Desired=Unknown/Install ii adduser ii apg
| Status=Not/Inst/Conf- ii adwaita-icon-theme ii app-install-data
|/ Err?=(none)/Reinst-r ii adwaita-icon-theme- ii apparmor
||/ Name ii alsa-base ii apt
+++-=================== ii alsa-utils ii apt-clone
ii accountsservice ii anacron ii apt-transport-https
ii acl ii apache2 ii apt-utils
ii acpi-support ii apache2-bin ii apt-xapian-index
ii acpid ii apache2-data ii aptdaemon
ii add-apt-key ii apache2-utils ii aptdaemon-data
2017-01-06 13:19 Page 2
ii aptitude ii avahi-daemon ii bind9-host
ii aptitude-common ii avahi-utils ii binfmt-support
ii apturl ii aview ii binutils
ii apturl-common ii banshee ii bison
ii archdetect-deb ii baobab ii blt
ii aspell ii base-files ii blueberry
ii aspell-en ii base-passwd ii bluetooth
ii at-spi2-core ii bash ii bluez
ii attr ii bash-completion ii bluez-cups
ii avahi-autoipd ii bc ii bluez-obexd
.....
Le bandiere utilizzate qui sono:
--column
definisce il numero di colonne create nell'output.-l
specifica la lunghezza della pagina (il valore predefinito è 66 righe).
10. tr Comando
Questo strumento traduce o elimina i caratteri dall'input standard e scrive i risultati sull'output standard.
La sintassi per utilizzare tr è la seguente:
tr options set1 set2
Dai un'occhiata agli esempi seguenti, nel primo comando, set1( [:upper:] )
rappresenta il caso dei caratteri di input (tutti maiuscoli).
Quindi set2([:lower:])
rappresenta il caso in cui saranno i caratteri risultanti. È la stessa cosa nel secondo esempio e la sequenza di escape \n
significa stampare l'output su una nuova riga:
tecmint@TecMint ~ $ echo "WWW.TECMINT.COM" | tr [:upper:] [:lower:]
linux-console.net
tecmint@TecMint ~ $ echo "news.linux-console.net" | tr [:lower:] [:upper:]
NEWS.TECMINT.COM
11. altro comando
Il comando more è un utile filtro di lettura dei file creato fondamentalmente per la visualizzazione dei certificati. Mostra il contenuto del file in un formato simile a una pagina, in cui gli utenti possono premere [Invio] per visualizzare ulteriori informazioni.
Puoi usarlo per visualizzare file di grandi dimensioni in questo modo:
tecmint@TecMint ~ $ dmesg | more
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic
4.4.6)
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7
[ 0.000000] KERNEL supported cpus:
[ 0.000000] Intel GenuineIntel
[ 0.000000] AMD AuthenticAMD
[ 0.000000] Centaur CentaurHauls
[ 0.000000] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256
[ 0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
[ 0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
[ 0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
[ 0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[ 0.000000] x86/fpu: Using 'eager' FPU context switches.
[ 0.000000] e820: BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable
[ 0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable
--More--
12. meno comando
less è l'opposto del comando more riportato sopra ma offre funzionalità extra ed è un po' più veloce con file di grandi dimensioni.
Usalo allo stesso modo di altro:
tecmint@TecMint ~ $ dmesg | less
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic
4.4.6)
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7
[ 0.000000] KERNEL supported cpus:
[ 0.000000] Intel GenuineIntel
[ 0.000000] AMD AuthenticAMD
[ 0.000000] Centaur CentaurHauls
[ 0.000000] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256
[ 0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
[ 0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
[ 0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
[ 0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[ 0.000000] x86/fpu: Using 'eager' FPU context switches.
[ 0.000000] e820: BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable
[ 0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable
:
Scopri perché "less" è più veloce del comando "more" per un'efficace navigazione dei file in Linux.
Per ora è tutto, facci sapere se ci sono strumenti utili da riga di comando non menzionati qui, che agiscono come filtri di testo in Linux tramite la sezione commenti qui sotto.