2010-07-22 19 views

Respuesta

12

Creo que awk es una mejor solución para este caso, simplemente use.

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

después de realizar eco "bla bla word word1 = strin1 string2" | awk -F "=" '{print $ 2}' Me sale strin1 string2 (¿por qué no imprime solo string2?) – lidia

+0

hi anders: Necesito solo la segunda palabra después del separador no todas las palabras después del separador, ¿puedes cambiar tu awk según que lidia – lidia

+0

@lidia fijo. En el ejemplo, imprime 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 

Y qué hay de empezar a leer sobre cómo utilizar sed/awk?

3

Esta respuesta es pura SED GNU:

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

puedo cambiar un poco la cuerda, porque es posible tener más palabras, las reglas van a cambiar si esa palabra no es la última.

Permite explicar esto:

  1. .*=: todos los caracteres antes del signo igual.
  2. .*= /?: esta es la parte principal, después de igual les dejo un espacio en blanco y pongo el/?, esto significa uno o cero ocurrencias, no sé si va a dejar un espacio aquí.
  3. [a-zA-Z0-9]* todas las ocurrencias de a-z A-Z 0-9, la palabra (string1).
  4. \([a-zA-Z0-9]*\) obtener todas las apariciones de a-zA-z0-9 de nuevo, la segunda palabra.
  5. \).* todas las demás cosas.
  6. /\1/ dará salida a todas las cosas entre \ (\).

Espero que esto ayude a alguien.