2010-07-22 4 views

Répondre

12

Je crois que awk est une meilleure solution pour ce cas, utilisez simplement.

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

après I perfrom écho "bla bla mot mot1 = strin1 string2" | awk -F "=" '{print $ 2}' Je reçois strin1 string2 (pourquoi ne pas imprimer seulement string2?) – lidia

+0

hi anders: Je n'ai besoin que du second mot après seperator pas tous les mots après seperator, pouvez-vous changer votre awk selon que lidia – lidia

+0

@lidia fixe. Dans l'exemple, il 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 

Et que diriez-vous que vous commencez à lire sur la façon d'utiliser sed/awk?

3

Cette réponse est pure ETD GNU:

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

je change un peu la chaîne, car il est possible d'avoir plus de mots, les règles changent si ce mot est pas le dernier.

Lets expliquer ceci:

  1. .*=: tous les caractères avant le signe égal.
  2. .*= /?: c'est la partie principale, après égal je laisse un vide espace et je mets le/?, cela signifie une ou zéro ocurrences, ne sais pas si vous laisserez un espace ici.
  3. [a-zA-Z0-9]* toutes les occurrences de a-z A-Z 0-9, le mot (chaîne1).
  4. \([a-zA-Z0-9]*\) obtenir à nouveau tous les ocurrences de a-zA-z0-9, le deuxième mot.
  5. \).* toutes les autres choses.
  6. /\1/ affichera toutes les choses entre \ (\).

J'espère que cela aide quelqu'un.