lpic/101/012_elaborare_flussi_di_testo.md
2024-10-29 21:28:54 +01:00

3.7 KiB

Reindirizzamenti e pipe

Tutti i programmi di manipolazione del testo partono da un input standard (stdin), lo inviano a un output standard (stdout) e inviano eventuali errori a un output degli errori standard (stderr). Solitamente, stdin e' quello digitato da tastiera.

Il carattere > dice a cat di indirizzare il suo output sul file newfile, non sullo stdout:

cat > newfile
Nuovo file di prova
^C

cat newfile
Nuovo file di prova

E' possibile usare la | per indirizzare l'output di un programma ad un altro programma.

Ottenere una parte di un file di testo

Il comando head e' usato per leggere di default le prime 10 righe di un file, mentre il comando tail le ultime 10. Per indicare il numero di righe e' possibile reindirizzare l'output al comando nl:

head /var/log/alternatives.log | nl
     1	update-alternatives 2024-10-02 20:46:38: run with --install /usr/bin/pager pager /bin/more 50 --slave /usr/share/man/man1/pager.1.gz pager.1.gz /usr/share/man/man1/more.1.gz
     2	update-alternatives 2024-10-02 20:47:08: run with --install /usr/bin/x-www-browser x-www-browser /usr/bin/brave-browser-nightly 1
     3	update-alternatives 2024-10-02 20:47:08: run with --install /usr/bin/gnome-www-browser gnome-www-browser /usr/bin/brave-browser-nightly 1
     4	update-alternatives 2024-10-02 20:47:08: run with --install /usr/bin/brave-browser brave-browser /usr/bin/brave-browser-nightly 1

Oppure, per contare il numero di righe totali di un file:

cat logs/borg_backup.log | wc -l
10153

sed

Possiamo usare sed per cercare solo le righe che contengono un determinato pattern:

sed -n /cat/p < ftu.txt

cat
zcat
bzcat
xzcat

il simbolo < indirizza il contenuto del file al comando sed. La stringa racchiusa dagli slash, ovvero /cat/, e' la stringa che stiamo ricercando. L'opzione -n indica a sed di non produrre output, se non quello generato dal comando p.

 sed /cat/d < ftu.txt
cut
head
ls
man
md5sum
nl
paste
sed
sort
split
sort
vim
cd
tail
uniq
wc
mv
cp
sed
passwd
pwd

In questo modo sed visualizzera' tutto il contenuto del file, eccetto cio' che d indica a sed di cancellare dal suo output.

Un uso comune di sed e' quello di trovare e sostituire del testo all'interno di un file. Per sostituire tutte le occorrenze di cat con dog:

sed s/cat/dog/ < ftu.txt

cut
head
ls
man
md5sum
nl
paste
sed
sort
dog
zdog
split
sort
vim
cd
tail
uniq
wc
mv
cp
sed
passwd
pwd
bzdog
xzdog

E' possibile passare direttamente il file a sed:

 sed s/cat/dog/ ftu.txt
cut
head
ls
man
md5sum
nl
paste
sed
sort
dog
zdog
split
sort
vim
cd
tail
uniq
wc
mv
cp
sed
passwd
pwd
bzdog
xzdog

In realta', il file non e' stato mai modificato. Per procedere, creando una copia di backup:

sed -i.backup s/cat/dog/ ftu.txt

ll ftu*
Permissions Size User Group Date Modified Name
.rw-rw-r--   114 dado dado  29 ott 21:19  ftu.txt
.rw-rw-r--   114 dado dado  29 ott 21:09  ftu.txt.backup

In questo modo, viene creato un file di backup e modificato direttamente il file originale.

Integrita' dei dati

  • md5sum
  • sha256sum
  • sha512sum

Per calcolare il valore SHA256 del file ftu.txt dare il seguente comando:

sha256sum ftu.txt
94cc7c49dfe55cd824d4e0c2f88881fba9daae41c11601f08b1bf818cd77a671  ftu.txt

Se creiamo un file che contiene il valore di checksum, possiamo utilizzarlo per verificare l'integrita' del file:

sha256sum ftu.txt > sha256sum.txt

sha256sum -c sha256sum.txt
ftu.txt: OK

Se il file originale fosse modificato, il controllo fallirebbe:

echo "new line" >> ftu.txt

sha256sum -c sha256sum.txt
ftu.txt: NON RIUSCITO
sha256sum: WARNING: 1 computed checksum did NOT match