我正在使用grep从文件中提取部件,但是我无法正常工作。从一个字符串,
something0( something1
我想提取一些东西0。这在某些输入上工作正常,
echo 'a b( c d' | grep -Po '(?m)^.+?(?=\(.+)' #outputs 'a b'
但在其他输入上却不太好,
echo 'a b( )c d( e f' | grep -Po '(?m)^.+?(?=\(.+)' #outputs 'a b' and '( ) c d'
我如何让grep只返回第一场比赛或改进我的正则表达式?管道greps输出到,
head -n 1
不是替代品,因为grep将使用这些行读取整个文件,如果我没有错误,则只会输出文件中的第一个匹配项。假设something0不包含任何'('。
感谢。
-P
答案 0 :(得分:0)
$ echo 'a b( )c d( e f' | grep -Po '(?m)^.+?(?=\(.+)'
a b
(另请注意,最后+
是不必要的;正则表达式等同于较短的(?m)^.+?(?=\(.)
。
答案 1 :(得分:0)
尝试使用下一个正则表达式。也有效:
$ echo 'a b( c d' | grep -Po '^([^(]*)'
a b
$ echo 'a b( )c d( e f' | grep -Po '^([^(]*)'
a b
答案 2 :(得分:0)
如何准确匹配您想要的内容?
^[^(]*?(?=\()