Experimentalia

Appunti raminghi

Split di una stringa in bash

leave a comment »

Direi che ormai è arrivato il momento di un articolo che abbia una certa utilità (e quindi si merita la lettera iniziale maiuscola :))

Normalmente preferisco usare cut o awk per separare i diversi token contenuti in una stringa.

Stamattina devo sostituire alcune regole di accesso su un firewall (iptables), ho bisogno di individuarle con delle regole ad hoc contenute in un array, la prima riga individua le regole e crea una lista con le loro posizioni.

NEWRULE[1]='iptables -R %s -i eth0 -t tcp --dport 443 --jump HTTPS_ENABLED'
NEWRULE[2]='iptables -R %s -i eth2 -t tcp --dport 443 --jump HTTPS_ENABLED'
 RULES_POSITION=`$IPT -vn --line-number -L INPUT | grep 443 | grep -n . | cut -f1 -d\ `
for INPOINT in $RULES_POSITION; do
   INDICE=${INPOINT%:*}
   POSITION=${INPOINT#*:}
   printf "${NEWRULE[INDICE]}" $POSITION
done


tra il codice riportato ci interessano in particolare le righe

   INDICE=${INPOINT%:*}
   POSITION=${INPOINT#*:}

ci aspettiamo in input delle stringhe del tipo formate da due numeri separate dai due punti, ad esempio 1:24.

Nel nostro caso il separatore è il simbolo di due punti

L’espansione si attiva con ${}, all’interno delle parentesi graffe va inserito il nome della variabile da separare in due. %:* prende la parte della variabile che va dall’inizio alla prima occorrenza del separatore (in questo caso🙂. Una nota. Questo comportamento è detto lazy , se si vuole utilizzare una selezione greedy bisogna usare un doppio simbolo di percentuale.

Cercherò di spiegarmi meglio:

  • La selezione greedy (=avida) va a cercare il separatore più lontano dall’inizio della stringa
  • La selezione lazy (=svogliata) invece si ferma non appena trova il primo separatore utile

Il comportamento è analogo per l’operatore # (## in versione greedy) che invece seleziona a partire dall’ultimo carattere della string.

Written by Eineki

marzo 14, 2008 a 12:08 pm

Pubblicato su bash, quick fix

Tagged with , , , , ,

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: