2010-07-22 33 views

Trả lời

12

Tôi tin rằng awk là giải pháp tốt hơn cho trường hợp này, chỉ cần sử dụng.

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

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

+0

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

+0

@lidia đã được sửa. Trong ví dụ, nó in chuỗi2. – 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 

Và làm thế nào về bạn bắt đầu đọc lên về cách sử dụng sed/awk?

3

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:

  1. .*=: tất cả các ký tự trước dấu bằng.
  2. .*= /?: đâ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.
  3. [a-zA-Z0-9]* tất cả các ocurrences của a-z A-Z 0-9, từ (chuỗi1).
  4. \([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.
  5. \).* tất cả các nội dung khác.
  6. /\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 đó.

Các vấn đề liên quan