2010-07-22 11 views

Odpowiedz

12

Wierzę, że awk jest lepszym rozwiązaniem dla tego przypadku, po prostu użyj.

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

po I perfrom echo "bla bla słowo word1 = strin1 string2" | awk -F "=" '{print $ 2}' Dostaję strin1 string2 (dlaczego nie jest to tylko print2?) – lidia

+0

hi anders: Potrzebuję tylko drugiego słowa po seperatorze nie wszystkie słowa po seperatorze, czy możesz zmienić swój awk zgodnie z ta lita – lidia

+0

@lidia naprawiona. W przykładzie drukuje 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 

A jak o rozpoczęciu czytania na sposób korzystania sed/awk?

3

Ta odpowiedź jest czysta GNU SED:

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

i zmienić trochę ciąg, ponieważ jest możliwe, aby mieć więcej słów, zasady zmieni jeśli to słowo nie jest ostatnim.

Pozwala to wyjaśnić:

  1. .*=: wszystkie znaki przed znakiem równości.
  2. : to jest główna część, po równym pozostawieniu pustej przestrzeni i umieszczam/?, oznacza to jedno lub zero ocurrences, nie wiem , jeśli zostawisz tu spację.
  3. [a-zA-Z0-9]* wszystkie zależności od a-z A-Z 0-9, słowo (string1).
  4. \([a-zA-Z0-9]*\) Ponownie uzyskaj wszystkie zaległości a-zA-z0-9, drugie słowo.
  5. \).* wszystkie inne rzeczy.
  6. /\1/ wyświetli wszystkie rzeczy pomiędzy \ (\).

Mam nadzieję, że to pomoże komuś.