2010-07-22 17 views

risposta

12

Credo che awk sia una soluzione migliore per questo caso, è sufficiente utilizzare.

echo "bla bla word word1 = strin1 string2" | awk -F"=" '{print $2}' | awk '{print $2}' 
+0

dopo che perfrom eco "bla bla word word1 = strin1 string2" | awk -F "=" '{print $ 2}' Ricevo strin1 stringa2 (perché non stampa solo stringa2?) – lidia

+0

hi anders: ho bisogno solo della seconda parola dopo il separatore non tutte le parole dopo il separatore, puoi cambiare il tuo awk secondo che lidia – lidia

+0

@lidia corretto. Nell'esempio stampa string2. – Anders

6
$ echo " bla bla word word1 = strin1 string2 " | sed 's/.[^=]*=\(.[^ \t]*\)[ \t]*\(.[^ \t]*\)\(.*\)/\2/' 
string2 


$ echo " bla bla word word1 =swhsw 123 " | awk -F"=" '{split($2,a," ");print a[2]}' 
123 

E che dire di iniziare a leggere su come utilizzare sed/awk?

3

Questa risposta è pura GNU SED:

export text=" bla bla word word1 = string1 string2 string3 "; 
echo "$text" | sed 's/.*= \?[a-zA-Z0-9]* \([a-zA-Z0-9]*\).*/\1/'; 

a cambiare un po 'la corda, perché è possibile avere più parole, le regole cambiano se questa parola non è l'ultimo.

Consente spiegare questo:

  1. .*=: tutti i caratteri prima di segno uguale.
  2. .*= /?: questa è la parte principale, dopo aver lasciato uno spazio vuoto e ho messo il/?, questo significa uno o zero occorrenze, non so se si lascia uno spazio qui.
  3. [a-zA-Z0-9]* tutte le occorrenze di a-z A-Z 0-9, la parola (stringa1).
  4. \([a-zA-Z0-9]*\) ottenere nuovamente tutte le occorrenze di a-zA-z0-9, la seconda parola.
  5. \).* tutte le altre cose.
  6. /\1/ restituirà tutte le informazioni tra \ (\).

Spero che questo aiuti qualcuno.