Bash tips: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
nessun oggetto della modifica
Nessun oggetto della modifica
Riga 40: Riga 40:
===Editing della linea di comando===
===Editing della linea di comando===
Alcuni tasti di scelta rapida per l'editing da linea di comando:
Alcuni tasti di scelta rapida per l'editing da linea di comando:
: '''<tt>CTRL+a</tt>''': Vai all'inizio delle linea
: '''<code>CTRL+a</code>''': Vai all'inizio delle linea
: '''<tt>CTRL+e</tt>''': Vai alla fine della linea
: '''<code>CTRL+e</code>''': Vai alla fine della linea
: '''<tt>CTRL+k</tt>''': Cancella fino dalla posizione corrente alla fine della linea
: '''<code>CTRL+k</code>''': Cancella fino dalla posizione corrente alla fine della linea
: '''<tt>CTRL+u</tt>''': Cancella fino dalla posizione corrente all'inizio della linea
: '''<code>CTRL+u</code>''': Cancella fino dalla posizione corrente all'inizio della linea
: '''<tt>CTRL+l</tt>''': Pulisce lo schermo
: '''<code>CTRL+l</code>''': Pulisce lo schermo
: '''<tt>META+f</tt>''': Vai una parola avanti
: '''<code>META+f</code>''': Vai una parola avanti
: '''<tt>META+b</tt>''': Vai una parola indietro
: '''<code>META+b</code>''': Vai una parola indietro
: '''<tt>META+d</tt>''': Cancella la parola successiva
: '''<code>META+d</code>''': Cancella la parola successiva
: '''<tt>META+backspace</tt>''': Cancella la parola precedente
: '''<code>META+backspace</code>''': Cancella la parola precedente


{{Box|Nota sul tasto META|Il tasto Meta può essere usato premendo <code>ALT</code> e ''contemporaneamente'' il carattere del comando che interessa, oppure premendo <code>ESC</code> e ''successivamente'' il tasto del comando che interessa. In quest'ultimo modo non è necessario premere due tasti contemporaneamente. Questa è una regola generica per gli shortcut di bash che usano il tasto Meta.}}
{{Box|Nota sul tasto META|Il tasto Meta può essere usato premendo <code>ALT</code> e ''contemporaneamente'' il carattere del comando che interessa, oppure premendo <code>ESC</code> e ''successivamente'' il tasto del comando che interessa. In quest'ultimo modo non è necessario premere due tasti contemporaneamente. Questa è una regola generica per gli shortcut di bash che usano il tasto Meta.}}
Riga 81: Riga 81:
</pre>
</pre>


richiama ed esegue il terz'ultimo comando, mentre:
richiama ed esegue il terzultimo comando, mentre:


<pre>
<pre>
Riga 146: Riga 146:


=== Manipolazione delle stringhe ===
=== Manipolazione delle stringhe ===
Nelle shell *nix, storicamente, la manipolazione delle stringhe viene fatto attraverso programmi esterni alla shell come seq, awk e perl. Questi programmi vengono ancora usati quando si vuole mantenere la compatibilità con la shell <tt>'''sh'''</tt>, tuttavia imparare anche il solo sed (il più semplice dei tre) non è cosa immediata.
Nelle shell *nix, storicamente, la manipolazione delle stringhe viene fatto attraverso programmi esterni alla shell come seq, awk e perl. Questi programmi vengono ancora usati quando si vuole mantenere la compatibilità con la shell <code>'''sh'''</code>, tuttavia imparare anche il solo sed (il più semplice dei tre) non è cosa immediata.


Se si usa Bash, non è necessario usare nessun programma esterno, ma basta imparare i tre operatori fondamentali ed alcuni concetti di base, per poter fare tutte le manipolazioni più comuni.
Se si usa Bash, non è necessario usare nessun programma esterno, ma basta imparare i tre operatori fondamentali ed alcuni concetti di base, per poter fare tutte le manipolazioni più comuni.


In Bash una stringa non è altro che una variabile, si indica dunque con <tt>${nome}</tt> oppure con la forma abbreviata <tt>$nome</tt>. Il nome dentro le graffe può essere seguito da un modificatore che manipola la variabile, ad esempio:
In Bash una stringa non è altro che una variabile, si indica dunque con <code>${nome}</code> oppure con la forma abbreviata <code>$nome</code>. Il nome dentro le graffe può essere seguito da un modificatore che manipola la variabile, ad esempio:


  VAR="stringa-di-esempio"
<pre>VAR="stringa-di-esempio"
  echo ${VAR#stringa-}
echo ${VAR#stringa-}</pre>


elimina "stringa-" dall'inizio della variabile.
elimina "stringa-" dall'inizio della variabile.
Riga 159: Riga 159:
I modificatori sono molti, ma possono essere facilmente ricordati se si imparano i tre fondamentali:
I modificatori sono molti, ma possono essere facilmente ricordati se si imparano i tre fondamentali:


; <tt>#</tt> : sottrae dall'inizio della stringa ''(minimale)''
; <code>#</code> : sottrae dall'inizio della stringa ''(minimale)''
; <tt>%</tt> : sottrae dalla fine della stringa ''(minimale)''
; <code>%</code> : sottrae dalla fine della stringa ''(minimale)''
; <tt>/</tt> : sostituisce una sottostringa con un'altra ''(solo la prima volta che viene incontrata)''
; <code>/</code> : sostituisce una sottostringa con un'altra ''(solo la prima volta che viene incontrata)''


Questi operatori sono minimali, questo vuol dire che se si usano le espressioni regolari per indicare la sottostringa (da eliminare o sostituire) verrà individuata in caso di ambiguità la sottostringa più piccola (o solo la prima nel caso della sostituzione).  
Questi operatori sono minimali, questo vuol dire che se si usano le espressioni regolari per indicare la sottostringa (da eliminare o sostituire) verrà individuata in caso di ambiguità la sottostringa più piccola (o solo la prima nel caso della sostituzione).  
Riga 167: Riga 167:
Per ottenere gli operatori massimali basta raddoppiare il simbolo:
Per ottenere gli operatori massimali basta raddoppiare il simbolo:


; <tt>##</tt> : sottrae dall'inizio della stringa ''(massimale)''
; <code>##</code> : sottrae dall'inizio della stringa ''(massimale)''
; <tt>%%</tt> : sottrae dalla fine della stringa ''(massimale)''
; <code>%%</code> : sottrae dalla fine della stringa ''(massimale)''
; <tt>//</tt> : sostituisce una sottostringa con un'altra ''(tutte le volte che viene incontrata)''
; <code>//</code> : sostituisce una sottostringa con un'altra ''(tutte le volte che viene incontrata)''


Gli operatori massimali cercano di individuare la sottostringa più grande che corrisponde all'espressione regolare (nel caso del modificatore '''//''' tutte le sottostringhe vengono sostituite). Gli operatori di questo tipo vengono comunemente chiamati anche ''greedy (ingordi)''.
Gli operatori massimali cercano di individuare la sottostringa più grande che corrisponde all'espressione regolare (nel caso del modificatore '''//''' tutte le sottostringhe vengono sostituite). Gli operatori di questo tipo vengono comunemente chiamati anche ''greedy (ingordi)''.


Per una spiegazione dettagliata di tutti i modificatori e anche di altri modi di manipolare le stringhe in Bash (ad esempio <tt>expr</tt>) vedere:
Per una spiegazione dettagliata di tutti i modificatori e anche di altri modi di manipolare le stringhe in Bash (ad esempio <code>expr</code>) vedere:


* [http://www.tldp.org/LDP/abs/html/string-manipulation.html Advanced Bash-Scripting Guide: Manipulating Strings]
* [http://www.tldp.org/LDP/abs/html/string-manipulation.html Advanced Bash-Scripting Guide: Manipulating Strings]
Riga 179: Riga 179:
==== Esempi: manipolazione delle stringhe ====
==== Esempi: manipolazione delle stringhe ====


  VAR="questa.sarebbe.una.stringa.di.esempio"
<pre>VAR="questa.sarebbe.una.stringa.di.esempio"
    
    
                       # Risultato:
                       # Risultato:
Riga 190: Riga 190:
    
    
   echo ${VAR/st/ST}  # --> queSTa.sarebbe.una.stringa.di.esempio
   echo ${VAR/st/ST}  # --> queSTa.sarebbe.una.stringa.di.esempio
   echo ${VAR//st/ST}  # --> queSTa.sarebbe.una.STringa.di.esempio
   echo ${VAR//st/ST}  # --> queSTa.sarebbe.una.STringa.di.esempio</pre>


===Alternativa a basename===
===Alternativa a basename===
Riga 204: Riga 204:


=== Cambiare l'estensione ai file ===
=== Cambiare l'estensione ai file ===
Rinomina tutti i file <tt>*.txt</tt> della directory corrente in <tt>*.log</tt>:
Rinomina tutti i file <code>*.txt</code> della directory corrente in <code>*.log</code>:


for f in *.txt; do mv "$f" "${f/%txt/log}"; done
<pre>for f in *.txt; do mv "$f" "${f/%txt/log}"; done</pre>


==Link==
==Link==
6 999

contributi

Menu di navigazione