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ć:
.*=
: wszystkie znaki przed znakiem równości.
- : 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ę.
[a-zA-Z0-9]*
wszystkie zależności od a-z A-Z 0-9, słowo (string1).
\([a-zA-Z0-9]*\)
Ponownie uzyskaj wszystkie zaległości a-zA-z0-9, drugie słowo.
\).*
wszystkie inne rzeczy.
/\1/
wyświetli wszystkie rzeczy pomiędzy \ (\).
Mam nadzieję, że to pomoże komuś.
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
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
@lidia naprawiona. W przykładzie drukuje string2. – Anders