From 4b0c36d95b41e45d4fd31f2a408fba8a4479bed7 Mon Sep 17 00:00:00 2001 From: piccihud Date: Tue, 29 Oct 2024 21:28:54 +0100 Subject: [PATCH] aggiunto appunti della lezione --- 101/012_elaborare_flussi_di_testo.md | 183 +++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) diff --git a/101/012_elaborare_flussi_di_testo.md b/101/012_elaborare_flussi_di_testo.md index e69de29..34fce9e 100644 --- a/101/012_elaborare_flussi_di_testo.md +++ b/101/012_elaborare_flussi_di_testo.md @@ -0,0 +1,183 @@ +## 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`: + +```bash +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`: + +```bash +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: + +```bash +cat logs/borg_backup.log | wc -l +10153 +``` + +## sed + +Possiamo usare `sed` per cercare solo le righe che contengono un determinato pattern: + +```bash +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`. + +```bash + 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*: + +```bash +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`: + +```bash + 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: + +```bash +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: + +```bash +sha256sum ftu.txt +94cc7c49dfe55cd824d4e0c2f88881fba9daae41c11601f08b1bf818cd77a671 ftu.txt +``` + +Se creiamo un file che contiene il valore di checksum, possiamo utilizzarlo per verificare l'integrita' del file: + +```bash +sha256sum ftu.txt > sha256sum.txt + +sha256sum -c sha256sum.txt +ftu.txt: OK +``` + +Se il file originale fosse modificato, il controllo fallirebbe: + +```bash +echo "new line" >> ftu.txt + +sha256sum -c sha256sum.txt +ftu.txt: NON RIUSCITO +sha256sum: WARNING: 1 computed checksum did NOT match +``` \ No newline at end of file