我想要一个正则表达式,每次+other
出现时都会捕获,直到下一个逗号。
使用
(word),+(other)(word),(code),(word),(other)(code),(example)
(code),+(other),+(other)(code)(word)(example),(example),+(example)
+(code),(other)(code)(word),(code),(word)
我想返回
+(other)(word)
+(other)
+(other)(code)(word)(example)
我将使用的命令看起来像egrep -o '\+\(other).*,
。
唯一的问题是这个正则表达式中的逗号不一定是下一个逗号。现在命令返回
+(other)(word),(code),(word),(other)(code),
+(other),+(other)(code)(word)(example),(example),
答案 0 :(得分:1)
您使用,
消费尽可能多的任意0个字符(包括.*,
。
要避免匹配,
且仅匹配第一个,
,请使用否定括号表达式[^,]
并对其应用*
量词:
egrep -o '\+\(other\)[^,]*
[^,]*
模式将匹配,
以外的任何0+个字符。
答案 1 :(得分:0)
如果你的grep支持Perl兼容的正则表达式(PCRE),你可以使用非贪心匹配:
$ grep -Po '\+\(other\).*?,' infile
+(other)(word),
+(other),
+(other)(code)(word)(example),