SBE: Shell By Example
Transcript
SBE: Shell By Example
SBE: Shell By Example Lezione 2: I primi strumenti di elaborazione dei dati testuali C01: Come posso scrivere il testo della filastrocca di "Fra' Martino campanaro" in un file? Quale dei seguenti metodi è più adatto? echo -e "Fra Martino,\nCampanaro,\nDormi tu?\nDormi tu?\nSuona le campane,\nSuona le campane,\nDin, don, dan,\nDin, don, dan." > canzoncina.txt echo 'Fra Martino, Campanaro, Dormi tu? Dormi tu? Suona le campane, Suona le campane, Din, don, dan, Din, don, dan.' > canzoncina.txt cat << EOT > canzoncina.txt Fra Martino, Campanaro, Dormi tu? Dormi tu? Suona le campane, Suona le campane, Din, don, dan, Din, don, dan. EOT cat <<- EOT > canzoncina.txt Fra Martino, Campanaro, Dormi tu? Dormi tu? Suona le campane, Suona le campane, Din, don, dan, Din, don, dan. EOT echo Fra Martino, > canzoncina.txt echo Campanaro, >> canzoncina.txt for i in 1 2 do echo Dormi tu? >> canzoncina.txt done for i in 1 2 do echo Suona le campane, >> canzoncina.txt done for i in 1 2 do echo -n Din, don, dan >> canzoncina.txt if [ $i -eq 1 ] then echo , >> canzoncina.txt else echo . >> canzoncina.txt fi done C02: Cosa fa il seguente comando? : > canzoncina2.txt for i in 1 2 do cat canzoncina.txt >> canzoncina2.txt echo >> canzoncina2.txt done C03: Prova a spiegare cosa fa questo comando, e aiutati con il seguente per capire. exec 3>&1 exec > canzoncina2.txt for i in 1 2 do cat canzoncina.txt echo done exec 1>&3 3>&exec exec lsof exec lsof 3>&1 > prova.txt -a -p $$ -d0,1,2,3 1>&3 3>&-a -p $$ -d0,1,2,3 C04: Come faccio a concatenare i file farfallina.txt, labellalavanderina.txt e lavispateresa.txt in filastrocche.txt con un solo comando? cat << EOT > farfallina.txt Farfallina bella bianca, vola vola e mai si stanca. Vola qua, vola la', va a posarsi proprio qua. EOT cat << EOT > labellalavanderina.txt La bella lavanderina che lava i fazzoletti per i poveretti della citta'. Fai un salto Fanne un altro Fai la giravolta Falla un'altra volta Guarda in su Guarda in giu' Dai un bacio a chi vuoi tu! EOT cat << EOT > lavispateresa.txt La vispa Teresa avea tra l'erbetta a volo sorpresa gentil farfalletta. E tutta giuliva stringendola viva gridava, gridava: "L'ho presa! L'ho presa!" A lei supplicando l'afflitta grido': "Vivendo volando, che male ti fo? Tu si' mi fai male Stringendomi l'ale. Deh, lasciami, anch'io Son figlia di Dio". Confusa, pentita, Teresa arrossi'. Dischiuse le dita E quella fuggi'. EOT C05: Di quante righe, caratteri e parole sono composte queste filastrocche? C06: Come estraggo le singole filastrocche da filastrocche.txt? C07: Come faccio a scrivere il testo di farfallina.txt tutto maiuscolo? C08: I messaggi del kernel possono essere visualizzati sia con il comando dmesg che leggendo il file /var/log/dmesg, come faccio a consultarli passo passo, arrivare in fondo e tornare all'inizio e cercare una determinata parola? C09: Come faccio a monitorare il login e il logout degli utenti generalmente riportato nel log /var/log/auth.log? C10: Come posso monitorare il login e il logout degli utenti con una profondità di alcuni giorni? C11: Come visualizzo gli ultimi 4 file di log modificati? C12: Cosa fanno le seguenti istruzioni? Come posso rendere maiuscola l'intestazione? cat << EOT > personaggi.csv id,personaggio,autore,data di creazione,prima apparizione/distributore 1,Dick Tracy,Chester Gould,04-10-1931,Chicago Tribune Syndicate 2,Pogo,Walt Kelly,1941,Dell's Animal Comics 3,Li'l Abner Yokum,Al Capp,13-08-1934,United Feature Syndicate 4,Patricia "Peppermint Patty" Reichardt,Charles M. Shultz,22-08-1966,United Feature Syndicate 5,Bristow,Frank Dickens,09-1961,Aberdeen Press & Journal EOT declare -a LUNGHEZZA_CAMPI for i in `seq 1 5` do LUNGHEZZA_CAMPI[$i]=`cut -d, -f$i personaggi.csv | wc -L` done declare -a VALORE_CAMPI : > personaggi.dat while read line do for i in `seq 1 5` do VALORE_CAMPI[$i]=`cut -d, -f$i <<< $line` printf '%-*s' ${LUNGHEZZA_CAMPI[$i]} "${VALORE_CAMPI[$i]}" >> personaggi.dat done echo >> personaggi.dat done < personaggi.csv C13: Come posso estrarre solo nome e autore da personaggi.csv e personaggi.dat? Posso invertire l'ordine delle colonne? C14: Come posso ordinare le righe dei file personaggi.csv e personaggi.dat per nome del personaggio? E adeguare l'ID al nuovo ordine? C15: Come faccio ad estrarre dalla seguente lista gli elementi duplicati? E ottenere una lista senza duplicati? cat << EOT > lista_colori.txt carminio blu di prussia indaco terra di siena carminio amaranto indaco EOT