获取所有出现的搜索模式

时间:2010-08-15 08:23:47

标签: regex sed replace

我尝试从文件中获取模式的所有出现,但是如果每行出现多个模式,则当前失败。

文件中的示例行:

lorem ipsum foo="match1" lorem ipsum foo="match2" lorem ipsum

我想要的输出:

match1 match2

我尝试使用sed:

sed -ne 's/^.*foo="\([^"]*\)".*$/\1/p'

有了这个表达式,我只能第一次出现,但我不知道如何让它变得更好。

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

使用grep代替sed

grep -o -P '(?<=foo=")[^"]*'

答案 1 :(得分:0)

$ s="lorem ipsum foo="match1" lorem ipsum foo="match2" lorem ipsum"
$ echo $s|tr "[ \t]" "\n"|awk -F"=" '$1=="foo"{print $2}'
match1
match2

答案 2 :(得分:0)

这是为了向您显示您可能不想使用sed。它的工作原理非常强大,但在某些极端情况下它可能会失败:

sed -n 's/\(foo="[^"]*\)/\n\1\n/g;s/[^\n]*\n*foo="//g;s/\n"[^n]*$//p' file