Câu trả lời này là tinh khiết GNU SED:
export text=" bla bla word word1 = string1 string2 string3 ";
echo "$text" | sed 's/.*= \?[a-zA-Z0-9]* \([a-zA-Z0-9]*\).*/\1/';
tôi thay đổi một chút chuỗi bởi vì có thể có lời hơn, các quy tắc sẽ thay đổi nếu từ đó là không phải là cuối cùng.
Hãy giải thích điều này:
.*=
: tất cả các ký tự trước dấu bằng.
.*= /?
: đây là phần chính, sau khi bằng nhau tôi để trống khoảng trống và tôi đặt/?, điều này có nghĩa là một hoặc không ocurrences, không biết nếu bạn sẽ để lại một không gian ở đây.
[a-zA-Z0-9]*
tất cả các ocurrences của a-z A-Z 0-9, từ (chuỗi1).
\([a-zA-Z0-9]*\)
nhận lại tất cả các tín hiệu của a-zA-z0-9, từ thứ hai.
\).*
tất cả các nội dung khác.
/\1/
sẽ xuất tất cả những thứ bạn giữa \ (\).
Tôi hy vọng điều này sẽ giúp ai đó.
sau khi tôi perfrom echo "bla bla word word1 = strin1 string2" | awk -F "=" '{print $ 2}' Tôi nhận được strin1 string2 (tại sao nó không in chỉ string2?) – lidia
hi anders: Tôi chỉ cần từ thứ hai sau khi seperator không phải tất cả các từ sau seperator, bạn có thể thay đổi awk của bạn theo rằng lidia – lidia
@lidia đã được sửa. Trong ví dụ, nó in chuỗi2. – Anders