Espressioni Regex 1. Verifica indirizzo ip /(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/ https://regex101.com/r/mV1mH2/1 2. Codice Fiscale in regex con verifica giorno del mese (senza verifica anno bisestile) con omocodia ristretta alle ultime 3 cifre (le prime che vengono modificate in caso di omocodia) /([A-Z]{6})([0-9]{2})(([DHPS](0[1-9]|1[0-9]|2[0-9]|30|4[1-9]|5[0-9]|6[0-9]|70))|([ACELMRT](0[1-9]|1[0-9]|2[0-9]|30|31|4[1-9]|5[0-9]|6[0-9]|70|71))|(B(0[1-9]|1[0-9]|2[1-9]|4[1-9]|5[0-9]|6[1-9])))[A-Z]{1}[0-9]{3}[A-Z]/ https://regex101.com/r/nS7hD8/1 versione con omocodia che non verifica pero l'anno bisestile e ne se le lettere da destra sono state sostituite /([A-Z]{6})([0-9LMNPQRSTUV]{2})(([DHPS](0[1-9]|1[0-9]|2[0-9]|30|4[1-9]|5[0-9]|6[0-9]|70|[0-3]{1}[LMNPQRSTUV]{1}|[LMNPQRSTUV]{2}))|([ACELMRT](0[1-9]|1[0-9]|2[0-9]|30|31|4[1-9]|5[0-9]|6[0-9]|70|71|[0-3]{1}[LMNPQRSTUV]{1}|[LMNPQRSTUV]{2}))|(B(0[1-9]|1[0-9]|2[1-9]|4[1-9]|5[0-9]|6[1-9]|[0-2]{1}[LMNPQRSTUV]{1}|[LMNPQRSTUV]{2})))[A-Z]{1}[0-9LMNPQRSTUV]{3}[A-Z]/ 3. Giorno_della_settimana GG/MM/AAAA. /(((lun|mart|mercol|giov)(edi|edì|edi'))|(Venerd(i|ì|i')|Sabato|Domenica)) (0[1-9]|1[0-9]|2[0-9]|30|31)\/(0[1-9]|1[0-2])\/(19[0-9]{2}|2[0-9]{3})/i https://regex101.com/r/cA5uE0/1 4. Espressione regolare che denote costanti reali in linguaggio di programmazione, prevedendo anche la notazione esponenziale. /(^(\.\d+($| [eE][-\+]\d+))|^[-\+]?\d+\.\d+($| [eE][-\+]\d+))/ https://regex101.com/r/hM7rN2/1 5. Verifica che la stringa inserita sia composta tra 8 e 10 caratteri e contenga ognuno dei seguenti: Lettera maiuscola, minuscola, numero e carattere speciale /((?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!"#$%&'()*+,-.:;<=>?@[\]^_`{|}~]).*).{8,10}/ https://regex101.com/r/iY0bQ4/1 6. Verifica di un URL /^(https?):\/\/(((www.)?([^\s].*)\.[a-z]{2,5})|((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))(\/?(\S+)?|\:)/ https://regex101.com/r/qK2gT0/1
Comando Sed #1. Sostituisce gli spazi con underscore sed -e 's/ /_/g' "fileVecchio.txt" > "fileNuovo.txt" #2. Cancella tutti le righe relative ai commenti e le righe vuote in un file #2.1 Sostituisce commenti del tipo // con righe vuote sed 's/\/\/.*//g' #2.2 Converte tab e spazi presenti in righe vuote, in righe vuote sed -e 's/^\s*$//g' #2.3 Cancella commenti del tipo /* */ sed -e '/\/\*[^*]*\*\// d' #2.4 Cancella Righe vuote sed -e '/^\s*$/d' #2.5 COMANDO FINALE sed -e 's/\/\/.*//g' -e 's/^\s*$//g' -e '/\/\*[^*]*\*\// d' -e '/^\s*$/d' "file1" > "file2" #ECHO PER TESTARE: echo -e "la riga successiva ha commento\n//Ciao\nquesta non presenta commenti, ora inseriamo una riga con commenti del tipo slash asterisco\n/* test */" #3. Sostituisce i punti alla all\'interno di una riga con le virgole, tranne quello alla fine della riga. #2.1 Sostituiamo temporaneamente il punto a fine riga con una virgola sed -e 's/\.$/,/g' #2.2 Sostituiamo i punti restanti con le virgole sed -e '/\./,/g' #2.3 Sostituiamo nuovamente la virgola a fine riga col punto sed -e '/,$/\./g' #2.4 COMANDO FINALE sed -e '/\.$/,/g' -e '/\./,/g' -e '/,$/\./g' #Ci sarebbe un altro modo sed -E '/\.(.)/,\1/g' #ma non funziona con i puntini sospensivi #4. Sostituisce le abbreviazioni presenti in un sms: sostituire 6 con sei, x con per, cmq con comunque, xké con perché sed -e 's/6/sei/g' -e 's/[xX][^a-z]/per /g' -e 's/[Cc]mq/comunque/g' -e 's/[Xx]k[ée]/perché/g' #5. Estrae le email da un file contenente email e testo sed -E 's/(\S+@\S+)|./\1/g' "filemail.txt" > "filemailnew.txt" #NON COMPATIBILE CON re_format(7), SOSTITUIRE \S+ con [^[:space:]] #6. Cambia una linea che inizia con =, catenandola alla precedente e aggiungendo == sed -e ':loop' -e 'N' -e '$!bloop' -e 's/\n=/==/g' f.txt > f2.txt
Comando Grep #1. Dato un file .c, contare le linee che contengono un if grep -e 'if' file.c | wc -l #2. Scrivere un comando grep che mostri le informazioni di un processo dato il pid sarebbe piu semplice usare ps -f -p $pid #pero si possono ottenre piu info, tra le quali ppid del pid con (se il pid fosse 5656) ps -ef | grep '[5]656' #il 5 con le parentesi serve a non far uscire nel grep anche il grep stesso #3. Scrivere un comando grep che dato un file, stampi tutte le linee che non iniziano con un numero grep -e '^[^0-9]' file.txt #4. Scrivere un comando grep che visualizzi solo i file creati nel mese di Maggio e salvare l’elenco su un file ls -l | grep ' May ' > output.txt #5. Stampare tutte le linee di un file che contengono un numero pari, seguito da un numero dispari e seguiti dallo stesso numero pari (e.g., 232, 454, 818) grep -E '([02468])[13579]\1([^0-9]|$)' file.txt
Comando Find #1. Cercare tutti i file creati nel mese di maggio e creare un file che contiene il dettagli degli attributi $month = "May-2016" ls -ld `find . -newermt "01-$month -1 sec" -and -not -newermt "01-$month +1 month -1 sec"` > testo.txt #2. Cercare tutti i file che hanno estensione .txt, iniziano per vocale, hanno un numero nel nome, e salvarli in un file find ../.. -iname '[aeiou]*[0-9]*.txt' -print > find2.txt #3. Cercare i file che hanno estensione .doc e dimensioni superiori a 100KB e spostarli in una directory "./cento" find ../.. -iname "*.doc" -size +100 -type f -exec /bin/mv {} $directory \ es: find ../.. -iname "*.doc" -size +102400c -type f -exec /bin/mv {} /home/os/Desktop/Esame/Cento \ #4. Cercare i file che non hanno i permessi di scrittura per gli altri utenti e contarli find $directory ! -perm 0002 | wc -l find $directory ! -perm o=w | wc -l #5. Contare i file creati ieri con estensione .c appartenenti all’utente root find . -mtime +1 -prune -o -mtime +0 -iname "*.c" -user root -print #6. Cercare i file con estensione .doc presenti nella home e nella var con dimensione compresa tra 10kb e 1mb e spostarli nella cartella /home/mydocs chiedendo la conferma dell\'utente mkdir /home/mydocs sudo su #otteniamo i permessi di super user per poter accedere alla cartella home/mydocs find /home/ /var/ -iname "*.doc" -size +10240c -a -size -1024000c -type f | xargs mv -i -t /home/mydocs #Questa volta usiamo xargs per muovere i file con l'opzione --interactive in caso di file con lo stesso nome
Comando awk #1. Dato un file formattato in csv (comma separed value), che contiene 4 colonne, stampare solo la prima e la quarta. awk -F "," '{print $1 "\t" $4}' csv.txt #separato da un tab #2. Come l’esercizio di sopra ma passando ad awk un file con i comandi awk -f script.awk csv.txt #Ed il file e il seguente: BEGIN { FS = "," } ; { print $1 "\t" $4 } #3. Stampare solo la prima e la quarta colonna delle righe che rispettano un dato pattern awk '/pattern/ {print $1 "\t" $4}' #4. Come l’esercizio 3, l’utente può scegliere il pattern passandolo come variabile awk -v pat="pattern" '$0 ~ pat { print $1 $4 }' #5. Come 1, ma stampando le colonne invertite (prima la quarta e poi la prima) awk -F "," '{print $4 "\t" $1}' csv.txt #6. Contare le righe con più di n caratteri, es: 50 caratteri awk '{if(length($0)>50)count++;} END {print count}' csv.txt