2010-07-22 53 views
8

如何後「=」由sed的分離器獲得的第二個字(字符串)(需要忽略空格)靜息聯合如何通過sed的

例如

後「=」分離器獲得的第二個字(字符串)
echo " bla bla word word1 = strin1 string2 " | sed ..... 

我應該得到字符串2

另一個例子

echo " bla bla word word1 =swhsw 123 " | sed ..... 

我應該得到123

回答

12

我相信awk是這種情況下更好的解決方案,只需使用。

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

I perfrom echo「bla bla word word1 = strin1 string2」| awk -F「=」'{print $ 2}'我得到了strin1 string2(爲什麼它不只是打印string2?) – lidia 2010-07-22 11:33:28

+0

hi anders:我只需要隔離之後的第二個單詞,不是所有的單詞在隔離之後,你可以根據即 lidia – lidia 2010-07-22 11:37:32

+0

@lidia固定。在這個例子中它打印了字符串2。 – Anders 2010-07-22 11:39:45

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 

你怎麼樣開始閱讀了如何使用sed/awk

3

這個答案是純粹的GNU SED:

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

我改變一點點的字符串,因爲可能有更多的話,如果這個詞是不是最後的規則將發生變化。

讓我們解釋一下這個:等號之前的所有字符:

  1. .*=
  2. .*= /?:這是主要部分,相當於我留下空白 空間,我把/?,這意味着一個或零的出現,不知道 如果你將留在這裏的空間。
  3. [a-zA-Z0-9]* a-z A-Z 0-9所有出現的字(string1)。
  4. \([a-zA-Z0-9]*\)再次獲取a-zA-z0-9的所有貨幣,第二個單詞。
  5. \).*所有其他的東西。
  6. /\1/將輸出您在\(\)之間的所有內容。

我希望這有助於某人。