Friday, August 10, 2012

Un'infarinatura di sed

Cos'è sed? Sed è l'acronimo di stream editor. Sostanzialmente legge del testo riga per riga e lo trasforma in altro testo. Formattato però in un modo che ci fa più comodo.

Un esempio chiarirà tutto.

Prendiamo ad esempio un file, un mio file.

I seguenti pacchetti sono stati installati:
firebird2.5-common (2.5.0.26054~ReleaseCandidate3.ds2-1+b1)
firebird2.5-common-doc (2.5.0.26054~ReleaseCandidate3.ds2-1)
libfbclient2 (2.5.0.26054~ReleaseCandidate3.ds2-1+b1)
libgdiplus (2.6.7-3)
libglib2.0-dev (2.24.2-1)
libgluezilla (2.6-2)
libmono-accessibility1.0-cil (2.6.7-5)
libmono-accessibility2.0-cil (2.6.7-5)
libmono-bytefx0.7.6.1-cil (2.6.7-5)
libmono-bytefx0.7.6.2-cil (2.6.7-5)
libmono-c5-1.1-cil (2.6.7-5)
libmono-cairo1.0-cil (2.6.7-5)
libmono-cecil-private-cil (2.6.7-5)
libmono-cil-dev (2.6.7-5)
libmono-corlib1.0-cil (2.6.7-5)
libmono-cscompmgd7.0-cil (2.6.7-5)
libmono-cscompmgd8.0-cil (2.6.7-5)
libmono-data-tds1.0-cil (2.6.7-5)
libmono-data-tds2.0-cil (2.6.7-5)
libmono-data1.0-cil (2.6.7-5)
libmono-data2.0-cil (2.6.7-5)
libmono-db2-1.0-cil (2.6.7-5)
libmono-debugger-soft0.0-cil (2.6.7-5)
libmono-dev (2.6.7-5)
libmono-firebirdsql1.7-cil (2.6.7-5)
libmono-getoptions1.0-cil (2.6.7-5)
libmono-getoptions2.0-cil (2.6.7-5)
libmono-i18n-west1.0-cil (2.6.7-5)
libmono-i18n1.0-cil (2.6.7-5)
libmono-i18n2.0-cil (2.6.7-5)
libmono-ldap1.0-cil (2.6.7-5)
libmono-ldap2.0-cil (2.6.7-5)
libmono-management2.0-cil (2.6.7-5)
libmono-messaging-rabbitmq2.0-cil (2.6.7-5)
libmono-messaging2.0-cil (2.6.7-5)
libmono-microsoft-build2.0-cil (2.6.7-5)
libmono-microsoft7.0-cil (2.6.7-5)
libmono-microsoft8.0-cil (2.6.7-5)
libmono-npgsql1.0-cil (2.6.7-5)
libmono-npgsql2.0-cil (2.6.7-5)
libmono-oracle1.0-cil (2.6.7-5)
libmono-oracle2.0-cil (2.6.7-5)
libmono-peapi1.0-cil (2.6.7-5)
libmono-peapi2.0-cil (2.6.7-5)
libmono-posix1.0-cil (2.6.7-5)
libmono-profiler (2.6.7-5)
libmono-rabbitmq2.0-cil (2.6.7-5)
libmono-relaxng1.0-cil (2.6.7-5)
libmono-relaxng2.0-cil (2.6.7-5)
libmono-security1.0-cil (2.6.7-5)
libmono-sharpzip0.6-cil (2.6.7-5)
libmono-sharpzip0.84-cil (2.6.7-5)
libmono-sharpzip2.6-cil (2.6.7-5)
libmono-simd2.0-cil (2.6.7-5)
libmono-sqlite1.0-cil (2.6.7-5)
libmono-sqlite2.0-cil (2.6.7-5)
libmono-system-data-linq2.0-cil (2.6.7-5)
libmono-system-data1.0-cil (2.6.7-5)
libmono-system-data2.0-cil (2.6.7-5)
libmono-system-ldap1.0-cil (2.6.7-5)
libmono-system-ldap2.0-cil (2.6.7-5)
libmono-system-messaging1.0-cil (2.6.7-5)
libmono-system-messaging2.0-cil (2.6.7-5)
libmono-system-runtime1.0-cil (2.6.7-5)
libmono-system-runtime2.0-cil (2.6.7-5)
libmono-system-web-mvc1.0-cil (2.6.7-5)
libmono-system-web-mvc2.0-cil (2.6.7-5)
libmono-system-web1.0-cil (2.6.7-5)
libmono-system-web2.0-cil (2.6.7-5)
libmono-system1.0-cil (2.6.7-5)
libmono-tasklets2.0-cil (2.6.7-5)
libmono-wcf3.0-cil (2.6.7-5)
libmono-webbrowser0.5-cil (2.6.7-5)
libmono-windowsbase3.0-cil (2.6.7-5)
libmono-winforms1.0-cil (2.6.7-5)
libmono-winforms2.0-cil (2.6.7-5)
libmono0 (2.6.7-5)
libmono1.0-cil (2.6.7-5)
libmono2.0-cil (2.6.7-5)
libnunit-cil-dev (2.4.7+dfsg-6)
libnunit2.4-cil (2.4.7+dfsg-6)
libsqlite0 (2.8.17-6)
libwebkit1.1-cil (0.3-3)
mono-1.0-devel (2.6.7-5)
mono-1.0-gac (2.6.7-5)
mono-1.0-service (2.6.7-5)
mono-2.0-devel (2.6.7-5)
mono-2.0-service (2.6.7-5)
mono-complete (2.6.7-5)
mono-csharp-shell (2.6.7-5)
mono-devel (2.6.7-5)
mono-gmcs (2.6.7-5)
mono-jay (2.6.7-5)
mono-mcs (2.6.7-5)
mono-utils (2.6.7-5)
mono-xbuild (2.6.7-5)
monodoc-base (2.6.7-5)
monodoc-browser (2.6.2-3)
monodoc-manual (2.6.7-5)
prj2make-sharp (2.6.7-5)
zlib1g-dev (1:1.2.3.4.dfsg-3)


Viene dritto dritto dalla cronologia di synaptic. Sono dei pacchetti che ho sbagliato ad installare e che quindi dovrei rimuovere. Odio lasciare installati pacchi inutili sul pc, mi da l'idea di disordine e per di più occupa spazio.

Come potete notare, questo file è composto da tante righe e, a parte la prima, tutte hanno lo stesso formato:
nome del pacchetto (versione)
Il mio intento è quello di ottenere i soli nomi dei pacchetti, ordinati e docili come tante pecorelle in fila indiana. E poi dare in pasto questa lista di nomi al comando
sudo apt-get purge
per rimuoverli senza traccia. Tipo Mastro Lindo.

Il comando che ho usato è
sed -e '1d;s/(.*)//' da_rimuovere
Ora vi spiego tutto.

da_rimuovere è il file che è mostrato più sopra.

La parte contenuta tra gli apici è il comando di modifica che sed esegue sul file. C'è una cosa da tenere ben presente però: sed non modifica il file stesso! Bensì lo legge una riga dopo l'altra e scrive nel terminale il risultato dopo aver applicato la modifica.

In particolare, in questo caso, tra gli apici ci sono due comandi separati da un punto e virgola (;).

Il primo è 1d, ossia cancella (delete) la prima riga.
Il secondo è un comando di sostituzione, nella forma
s/stringa_da_sostituire/con_quest'altra_stringa/
Nel caso qui sopra, la stringa_da_sostituire consiste in due parentesi che racchiudono il numero di versione - che è sempre diverso - mentre la stringa sostituta è una stringa vuota. In pratica il risultato che si ottiene è quello di cancellare la stringa_da_sostituire.

Come faccio a identificare tutte le "parentesiaperta numerodiversione parentesichiusa"?
Posso farlo utilizzando un'espressione regolare. Un'espressione regolare è una sequenza di simboli che servono a identificare più stringhe con caratteristiche comuni fra loro.

Un'espressione regolare deve sempre essere racchiusa fra due barre (/  /). In questo caso, dato il suo uso all'interno del comando s///, non serve aggiungere altri slash.

L'espressione regolare si legge così:
(.*) tutte le stringhe che hanno una parentesi aperta, un qualsiasi numero di caratteri e una parentesi chiusa.
Il flag -e serve ad indicare a sed che quello che seguirà tra gli apici è il comando di modifica da eseguire.

Ecco fatto! Ora il comando è pronto per fare il suo dovere.

Potete creare uno script bash oppure digitare direttamente nel terminale questo comando:
sudo apt-get purge `sed -e '1d;s/(.*)//' da_rimuovere`
et voilà! PC pulito.

Per qualche lettura in più, da cui tra l'altro ho tratto questo breve tutorial, potete andare qui. Questa è solo la prima parte, qui la seconda e la terza. E' molto ben fatto e propone anche un piccolo ripasso sulle espressioni regolari.

A presto.

Wednesday, August 08, 2012

Elle me dit (Video + Traduzione)




Elle me dit “écris une chanson contente,
pas une chanson déprimante,
une chanson que tout le monde aime”.
Elle me dit “tu deviendras milliardaire.
T’auras de quoi être fier.
Ne finis pas comme ton père”.
Elle me dit “ne t’enferme pas dans ta chambre,
vas-y, secoue-toi et danse
dis moi c’est quoi ton problème?”

Elle me dit “qu’est ce que t’as t’as l’air coincé,
t’es défoncé ou t’es gai
Tu finiras comme ton frère”

CHORUS:

Elle me dit,
Elle me dit “c’est ta vie
fais ce que tu veux tant pis
un jour tu comprendras
un jour tu t’en voudras”
Elle me dit “t’es trop nul,
sors un peu de ta bulle.
Tu fais n’importe quoi
on dirait que t’aimes ca.”

Pourquoi tu gâches ta vie?
Pourquoi tu gâches ta vie?
Pourquoi tu gâches ta vie?
Danse danse danse danse elle me dit danse x2

Elle me dit “fais comme les autres garcons,
va taper dans un ballon,
tu deviendras populaire”.
Elle me dit, “qu’est-ce que tu fous sur internet,
ca va pas bien dans ta tête.
Regarde le temps que tu perds.”

Elle me dit “pourquoi tu te plains tout le temps?
On dirait que t’as huit ans.
C’est pas comme ca que tu vas plaire”
Elle me dit “un jour je ne serai plus là
et c’est quand elle me dit ça
qu’elle me dit un truc que j’aime.

CHORUS

Elle me dit, “t’as pas encore des cheveux blancs,
mais t’auras bientôt 30 ans,
faudrait que tu te réveilles.
Elle me dit “tu es toujours un enfant,
tu ne seras jamais grand.
Et moi je suis déjà vieille

Elle me dit “regarde un peu tes amis,
qu’est-ce qu’ils vont faire de leur vie,
y’ a de quoi se foutre en l’air.
Elle me dit, “oui un jour tu me tueras”
et c’est quand elle me dit ca
qu’elle me dit un truc que j’aime.

CHORUS
Lei mi dice "scrivi una canzone allegra,
non una canzone deprimente,
Una canzone che piaccia a tutti".
Lei mi dice "diventerai miliardario.
Avrai qualcosa di cui esser fiero.
Non finire come tuo padre".
Lei mi dice "Non chiuderti in camera,
dai, scuotiti un po',  balla,
dimmi, qual è il tuo problema?"

Lei mi dice "che cos'hai, hai l'aria sfatta,
ti sei "fatto" o sei gay
finirai come tuo fratello"

RIT.

Lei mi dice,
Lei mi dice "è la tua vita
fai quello che vuoi tanto peggio
un giorno capirai
un giorno te ne vorrai"
Lei mi dice "sei proprio un incapace,
esci un po' dalla tua bolla.
Non ha senso quello che fai
ma si direbbe che ti piace."

Perché sprechi la tua vita?
Perché sprechi la tua vita?
Perché sprechi la tua vita?
Balla balla balla balla mi dice balla x2

Lei mi dice "fai come gli altri ragazzi,
vai a prendere a calci un pallone,
diventerai famoso".
Lei mi dice, "cosa diavolo fai su internet,
non va mica bene nella tua testa.
Guarda quanto tempo perdi."

Lei mi dice "perché ti lagni tutto il tempo?
Si direbbe che hai otto anni.
Non è così che piacerai"
Lei mi dice "un giorno non ci sarò più
ed è quando mi dice così
Che mi dice una cosa che mi piace.

RIT.

Lei mi dice, "non hai ancora i capelli bianchi,
ma avrai presto trent'anni,
bisognerà che tu ti svegli.
Lei mi dice "sei sempre un bambino,
non crescerai mai.
E io sono già vecchia.

Lei mi dice "guarda un po' i tuoi amici,
cosa faranno della loro vita,
è qualcosa di cui fregarsene.
Lei mi dice, "si, un giorno mi ucciderai"
ed è quando mi dice così
che mi dice qualcosa che mi piace.

RIT.


Siete completamente liberi di riutilizzare questa traduzione ovunque vogliate. Sarebbe auspicabile che voi me lo faceste sapere ad esempio lasciando un commento qui sotto, ma anche se non lo fate va bene comunque.
Ciò che importa di più in assoluto è che riportiate che la traduzione proviene da questo blog pogandosullaluna.blogspot.com