quoll faq perl

Faq perl

Pubblicato il Pubblicato in Faq

Estrarre tutte le chiavi GPG pubbliche da un file

Supponiamo di avere un file di nome “file-con-chiavi-gpg” e di volerle estrarre eliminando ogni altra riga presente nel file.

perl -ne 'print if /-----BEGIN PGP PUBLIC KEY BLOCK-----/../-----END PGP PUBLIC KEY BLOCK-----/' file-con-chiavi-gpg

Naturalmente estrapolando la logica potremmo voler stampare tutte le righe comprese tra due regexp

perl -ne 'print if /regex1/../regex2/' file.txt

Aggiungere 1 a tutti i numeri presenti su una stringa

$str =~ s/(\d+)/$1+1/ge

Numerare un file di testo

Supponiamo di avere un file di testo (prova.txt) che vogliamo numerare. Possiamo utilizzare:

perl -pe '$_ = "$. $_"' prova.txt

Se si vuole simulare l’output di cat -n prova.txt basta usare:

perl -ne 'printf "% 5d %s", $., $_' prova.tx

Per togliere la numerazione possiamo utilizzare:

perl -pe 's/^\s*\d+\s*//' prova.txt

Encode/decode un file o stringa in Mime Base64

Supponiamo aver una stringa “Prova encode” ed un file “prova.txt” da voler encodare in Mime base64. Per risolvere il problema possiamo semplicemente lanciare la riga di comando:

perl -MMIME::Base64 -e 'print encode_base64("Prova encode")'
perl -MMIME::Base64 -0777 -ne 'print encode_base64($_)' prova.txt

Per l’operazione inversa basta fare:

perl -MMIME::Base64 -le 'print decode_base64("stringa in base64")'
perl -MMIME::Base64 -ne 'print decode_base64($_)' prova.base64

 

Stampare solo la linea 25 di un file

Supponiamo di voler stampare solamente una singola linea di un file, che per comodità indichiamo con la linea 25

perl -ne '$. == 25 && print && exit' file.txt

Naturalmente se vogliamo stampare anche le righe 31 e 57

perl -ne '($. == 25 || $. == 31 || $. == 57) && print' file.txt

Mentre se volessimo tutte le righe tra la 25 e la 57  comprese

perl -ne 'print if $. >= 25 && $. <= 57' file.txt

Rinominare un gruppo di file in base ad una regexpr

Supponiamo di voler rinominare il nome di un gruppo di file che hanno il seguente template:

file1_tmp.sh
file2_tmp.sh
...
file99_tmp.sh

e supponiamo di voler togliere la parte centrale ‘_tmp’ in tutti i file. Possiamo utilizzare il comando “rename” o “prename”:

 rename 's/_tmp//' *.sh

 

Come contare il numero di volte che un singolo carattere è presente in ogni riga di un file

Supponiamo di avere un file di testo di nome “file.csv” e di voler contare per ogni riga il numero di volte che si presenta un carattere, ad esempio il carattere “,“.

Supponiamo che il risultato sia l’output dello stesso file “file.csv” preceduto in ogni riga dal conteggio stesso.

Basta semplicemente la seguente singola riga perl:

perl -ne '@c=$_=~/;/g; print scalar(@c)." ". $_;' file.csv

 

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *