2011-06-13 43 views
0

使用awk從字符串中提取foo.com的好方法是什麼?awk:提取bcracket內容

ImaString (foo1.com, ,bar.com) (foo2.com, , bar.com) 

輸出,我想: foo1.com foo2.com

+4

的awk「{打印‘foo.com’}」 – 2011-06-13 12:34:11

+0

請提供您希望看到 – 2011-06-13 13:46:26

回答

1

很抱歉沒能表露無疑評論,但問題並沒有明確的措辭。你可以嘗試設置FS到正規表達式「(|」,讓AWK自動提取現場爲您提供:?

 
$ awk -F ',|\\(' ... 
+0

感謝您的及時響應的輸出結果。基本上,我想提取框架和這個foo.com中的foo.com併發生2次或更多次。 – ready 2011-06-13 12:56:53

+0

因此,您想要計算「foo.com」出現的次數作爲用括號括起來的逗號分隔列表的第一個元素? – 2011-06-13 12:59:39

+0

這是對的,但我不希望計數的次數,我想提取「foo.com」作爲逗號分隔列表括起來的第一個元素。 – ready 2011-06-13 13:04:14

0

問題仍然是一個有點不清楚,你問這個

$ echo "ImaString (foo.com, ,bar.com) (foo.com, , bar.com)" | 
    awk -F '(' '{sub(/,.*/,"", $2);{print $2}}' 
foo.com 
+0

謝謝,什麼是我想要什麼,但foo.com是一個變量,所以我希望它打印多次foo.com出現。 – ready 2011-06-13 13:48:16

+0

我剛剛編輯了我的第一篇文章。 – ready 2011-06-13 13:49:05

0

你確定你想使用AWK這個?桑達和grep似乎是爲這個更好的選擇。

$ echo "ImaString (foo1.com, ,bar.com) (foo2.com, , bar.com)" | 
    grep -E -o '\(([a-zA-Z0-9]*\....),' | sed -e 's/^.//' -e 's/,$//' 
foo1.com 
foo2.com 

結果轉儲到一個bash變量,帶衛生間算來,或者在bash把它們粘數組。

+0

我想我的第一篇文章還不夠清楚。我編輯過它。基本上foo.com可能是foo1.com,foo2.com等我編輯了第一篇文章,結果我想看。 – ready 2011-06-13 14:21:02

+0

@ Spencer Rathbun:awk可能是一個比使用管道多個進程更好的選擇。 – ripat 2011-06-13 14:25:10

+0

@ripat我很好奇你的推理。爲了這個目的,在linux/unix中進程產卵是故意便宜的。您可以將問題分解爲可管理的部分,並將適當的實用程序應用於每個部分。 – 2011-06-13 14:58:44

2

如果您在逗號分隔列表的多個領域:

awk -F, -v RS="[)(]" 'NF>1{print $1}' inputfile 
+0

謝謝,這就是我要找的。 – ready 2011-06-13 14:24:30