2014-09-23 13 views
6

ho una variabile chiamata inet che contiene la seguente stringa:sostituzioni multiple di una collana in bash

inet="inetnum:  10.19.153.120 - 10.19.153.127" 

Vorrei convertire questa stringa alla notazione di seguito:

10.19.153.120 10.19.153.127 

ho potuto facilmente raggiungere questo con sed 's/^inetnum: *//;s/^ -//', ma preferirei una soluzione più compatta/elegante e utilizzare bash. L'espansione dei parametri nidificati non funziona neanche:

$ echo ${${inet//inetnum: /}// -/} 
bash: ${${inet//inetnum: /}// -/}: bad substitution 
$ 

Altri suggerimenti? O dovrei usare sed questa volta?

risposta

8

Si può fare solo una sostituzione alla volta, quindi è necessario farlo in due fasi:

newinet=${inet/inetnum: /} 
echo ${newinet/ -/} 
3

usare un'espressione regolare in bash così:

[[ $inet =~ ([0-9].*)\ -\ ([0-9].*)$ ]] && newinet=${BASH_REMATCH[@]:1:2} 

L'espressione regolare potrebbe probabilmente essere più robusto, ma dovrebbe catturare i due indirizzi IP nella stringa di esempio. I due gruppi di cattura si trovano agli indici 1 e 2, rispettivamente, del parametro array BASH_REMATCH e assegnati al parametro newinet.

Problemi correlati