我尝试从文件中获取模式的所有出现,但是如果每行出现多个模式,则当前失败。
文件中的示例行:
lorem ipsum foo="match1" lorem ipsum foo="match2" lorem ipsum
我想要的输出:
match1 match2
我尝试使用sed:
sed -ne 's/^.*foo="\([^"]*\)".*$/\1/p'
有了这个表达式,我只能第一次出现,但我不知道如何让它变得更好。
感谢您的帮助。
答案 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