2011-06-13 63 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