GNU/Linux >> Linux Esercitazione >  >> Linux

12 comandi utili per filtrare il testo per operazioni di file efficaci 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 lo standard input, esegue un'operazione su di esso e scrive i risultati nello standard output.

Per questo motivo, può essere utilizzato per elaborare le informazioni in modi potenti, come ristrutturare l'output per generare report utili, modificare il testo nei file e molte altre attività di amministrazione del sistema.

Detto questo, di seguito sono riportati alcuni utili filtri di file o di testo in Linux.

1. Comando Awk

Awk è un notevole linguaggio di scansione ed elaborazione di pattern, 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 il awk pagina man 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 utili articoli su sed, che puoi leggere qui:

  1. Come usare il comando GNU 'sed' per creare, modificare e manipolare file in Linux
  2. 15 utili suggerimenti e trucchi per i comandi "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 generano righe che corrispondono a un determinato modello. Leggono le righe da un file o dall'input standard e stampano tutte le righe corrispondenti per impostazione predefinita sullo standard output.

Nota :Il programma principale è grep, le variazioni sono semplicemente le stesse dell'utilizzo di opzioni grep specifiche come di seguito (e vengono ancora utilizzate per la compatibilità con le versioni precedenti):

$ egrep = grep -E
$ fgrep = grep -F
$ rgrep = grep -r  

Di seguito sono riportati alcuni comandi di base di grep:

[email protected] ~ $ grep "aaronkilik" /etc/passwd
aaronkilik:x:1001:1001::/home/aaronkilik:

[email protected] ~ $ 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 principale

testa viene utilizzato per visualizzare le prime parti di un file, restituisce i primi 10 righe per impostazione predefinita. Puoi usare il -n num flag per specificare il numero di righe da visualizzare:

[email protected] ~ $ 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)

[email protected] ~ $ 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

coda restituisce le ultime parti (10 righe per impostazione predefinita) di un file. Usa il -n num interruttore per specificare il numero di righe da visualizzare.

Il comando seguente produrrà gli ultimi 5 righe del file specificato:

[email protected] ~ $ 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, coda ha un'opzione speciale -f per guardare le modifiche in un file in tempo reale (soprattutto i file di registro).

Il comando seguente ti consentirà di monitorare le modifiche nel file specificato:

[email protected] ~ $ 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 coda pagina man per un elenco completo di opzioni e istruzioni di utilizzo:

$ man tail

6. ordina Comando

ordina 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 :

[email protected] ~ $ cat domains.list
tecmint.com
tecmint.com
news.tecmint.com
news.tecmint.com
linuxsay.com
linuxsay.com
windowsmint.com
windowsmint.com

Puoi eseguire un semplice comando di ordinamento per ordinare il contenuto del file in questo modo:

[email protected] ~ $ sort domains.list
linuxsay.com
linuxsay.com
news.tecmint.com
news.tecmint.com
tecmint.com
tecmint.com
windowsmint.com
windowsmint.com

Puoi utilizzare ordina comando in molti modi, esamina alcuni degli articoli utili sul comando sort come segue:

  1. 14 esempi utili del comando "sort" di Linux – Parte 1
  2. 7 Interessanti esempi di comandi di "ordinamento" di Linux – Parte 2
  3. Come trovare e ordinare i file in base alla data e all'ora di modifica
  4. Come ordinare l'output del comando "ls" per data e ora dell'ultima modifica

7. Comando uniq

unique il comando viene utilizzato per segnalare o omettere righe ripetute, filtra le righe dallo standard input e scrive il risultato nello standard output.

Dopo aver eseguito ordina su uno stream di input, puoi rimuovere le righe ripetute con uniq come nell'esempio seguente.

Per indicare il numero di occorrenze di una riga, usa il -c opzione e ignora le differenze nel caso durante il confronto includendo -i opzione:

[email protected] ~ $ cat domains.list
tecmint.com
tecmint.com
news.tecmint.com
news.tecmint.com
linuxsay.com
linuxsay.com
windowsmint.com

[email protected] ~ $ sort domains.list | uniq -c 
2 linuxsay.com
2 news.tecmint.com
2 tecmint.com
1 windowsmint.com 

Leggi le uniq pagina man 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.tecmint.com 2.news.tecmint.com 3.linuxsay.com 4.windowsmint.com

Per riformattare il contenuto precedente in un elenco standard, esegui il comando seguente con -w interruttore viene utilizzato per definire la larghezza massima della linea:

tecmint[email protected] ~ $ cat domain-list.txt 
1.tecmint.com 2.news.tecmint.com 3.linuxsay.com 4.windowsmint.com

[email protected] ~ $ fmt -w 1 domain-list.txt
1.tecmint.com 
2.news.tecmint.com 
3.linuxsay.com 
4.windowsmint.com

9. pr Comando

pr Il comando converte i file di testo o l'input standard per la stampa. Ad esempio su Debian sistemi, puoi elencare tutti i pacchetti installati come segue:

$ dpkg -l

Per organizzare l'elenco in pagine e colonne pronte per la stampa, emettere il seguente comando.

[email protected] ~ $ 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

.....

I flag utilizzati qui sono:

  1. --column definisce il numero di colonne create nell'output.
  2. -l specifica la lunghezza della pagina (il valore predefinito è 66 righe).

10. tr Comando

Questo strumento traduce o elimina i caratteri dallo standard input e scrive i risultati nello standard output.

La sintassi per l'utilizzo di tr è il 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 nella sequenza di escape \n significa stampare l'output su una nuova riga:

[email protected] ~ $ echo "WWW.TECMINT.COM" | tr [:upper:] [:lower:]
www.tecmint.com

[email protected] ~ $ echo "news.tecmint.com" | tr [:lower:] [:upper:]
NEWS.TECMINT.COM

11. più Comando

di più command è un utile filtro per la 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:

[email protected] ~ $ 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 ([email protected]) (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

meno è l'opposto di più comando sopra ma offre funzionalità extra ed è un po' più veloce con file di grandi dimensioni.

Usalo allo stesso modo di altri:

[email protected] ~ $ 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 ([email protected]) (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é "meno" è più veloce del comando "più" per un'efficace navigazione dei file in Linux.

Per ora è tutto, facci sapere di eventuali utili strumenti da riga di comando non menzionati qui, che fungono da filtri di testo in Linux tramite la sezione commenti qui sotto.


Linux
  1. 8 comandi Linux per una gestione efficace dei processi

  2. 10 comandi Linux per la diagnostica di rete

  3. 3 comandi Linux da conoscere per la manipolazione del testo

  4. 3 utili comandi Linux per gli amministratori di sistema

  5. Il comando linux cat può essere utilizzato per scrivere testo su file?

40 utili comandi git per amministratori e sviluppatori Linux

I 50 comandi Zypper più utili per gli utenti SUSE Linux

I 50 comandi IP utili di Linux per gli amministratori di rete

14 Comandi Tar di base in Linux con esempi per i principianti

4 comandi Stat in Linux con esempio per utenti principianti

Pratici comandi Tee Linux e Unix per l'amministratore Linux