Mi spiegate questo? {%;*}
Mi spiegate questo? {%;*}
Girando per la rete ho trovato questo:
line=’this “is” a command;this “is” a pattern’
COMMAND=${line%;*}
PATTERN=${line#*;}
echo $COMMAND
echo $PATTERN
this “is” a command
this “is” a pattern
Potreste gentilmente spiegarmi il suo funzionamento?
Sapere come mai % e # influiscono in quel modo.
L'asterisco "trova le stringhe che contengono quante si vuole (anche zero) occorrenze del carattere precedente". Qui sembra che oltre a trovare, cancelli anche.
Grazie
line=’this “is” a command;this “is” a pattern’
COMMAND=${line%;*}
PATTERN=${line#*;}
echo $COMMAND
echo $PATTERN
this “is” a command
this “is” a pattern
Potreste gentilmente spiegarmi il suo funzionamento?
Sapere come mai % e # influiscono in quel modo.
L'asterisco "trova le stringhe che contengono quante si vuole (anche zero) occorrenze del carattere precedente". Qui sembra che oltre a trovare, cancelli anche.
Grazie
Re: Mi spiegate questo? {%;*}
Sono "comandi" interni di bash:
${var#pattern} rimuove pattern (se presente) dall'inizio di var e ritorna la stringa risultante
${var%pattern} fa la stessa cosa ma pattern viene tolto se è presente alla fine.
Esempio:
In bash l'asterisco ha un significato leggermente differente rispetto a quello delle espressioni regolari. Infatti significa qualsiasi stringa (compresa quella nulla).
Talvolta si usano le versioni "ghiotte" di #/% cioé ## e %% per togliere tutto il possibile. Per esempio:
Per maggiori info: http://www.pluto.it/files/ildp/guide/ab ... l#AEN19192
${var#pattern} rimuove pattern (se presente) dall'inizio di var e ritorna la stringa risultante
${var%pattern} fa la stessa cosa ma pattern viene tolto se è presente alla fine.
Esempio:
Codice: Seleziona tutto
var="esempiopippoesempio"
echo ${var#esempio}
pippoesempio
echo ${var%esempio}
esempiopippo
Talvolta si usano le versioni "ghiotte" di #/% cioé ## e %% per togliere tutto il possibile. Per esempio:
Codice: Seleziona tutto
file=/full/path/pippo
echo ${file##*/}
Raising Elephants Is So Utterly Boring
Re: Mi spiegate questo? {%;*}
Se per esempio dentro a un file di testo ho cinque esempiopippoesempio e cinque provaplutoprova scritti in ordine sparso e voglia prelevare solo la parte "plutoprova" da tutte e cinque le sue righe (quindi ritrovarmi plutoprova stampato per cinque volte), con un ciclo for come dovrei impostarte il comando?
Re: Mi spiegate questo? {%;*}
In bash puoi fare così:
Per i casi reali, con file e pattern non semplici, è meglio ( = più performante, leggibile, etc. ) usare sed/awk:
oppure
Per fare una prova, ho creato un file di 100000 di righe e l'ho dato in pasto ai comandi qui sopra; questo sono i tempi di esecuzione:
bash 19.373s
sed 1.071s
awk 0.817s
Codice: Seleziona tutto
while read line; do
if [ "$line" = "provaplutoprova" ]; then
echo ${line#prova};
done <file
Codice: Seleziona tutto
sed -n 's/prova\(plutoprova\)/\1/p' fileCodice: Seleziona tutto
awk '/provaplutoprova/{print "plutoprova"} file'bash 19.373s
sed 1.071s
awk 0.817s
Raising Elephants Is So Utterly Boring
Re: Mi spiegate questo? {%;*}
Grazie, vedrò di lavorarci sù.
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti
