使用与 GNU grep -P 兼容的 perl 正则表达式

GxF*_*int 12 grep regular-expression

我在(?<=\[')[^,]*包含以下行的文件上使用此正则表达式disk = ['OVS/sdasd/asdasd/asdasd/something.img, w']

我想让它回来 OVS/sdasd/asdasd/asdasd/something.img

我如何使用grep才能使其工作?

我试过,grep -P "(?<=\[')[^,]*"但它返回整行。

slm*_*slm 16

添加-o开关,以便grep只返回与您正在搜索的模式匹配的内容:

$ grep -Po "(?<=\[')[^,]*" data.txt 
OVS/sdasd/asdasd/asdasd/something.img
Run Code Online (Sandbox Code Playgroud)


Jos*_* R. 6

您也可以在sed没有环视断言的情况下使用以获得更大的可移植性(-o可能不适用于您的grep):

sed "s!['\(\[^,\]*\),.*\$!\1!;t;d;p" data.txt
Run Code Online (Sandbox Code Playgroud)

请注意此处反斜杠转义的“奇怪”用法。这是因为sed默认情况下使用 BRE(请参阅此问题)。

说到可移植性,为什么不直接使用 Perl?

perl -nle "print \$1 if /\['([^,]*)/" data.txt
Run Code Online (Sandbox Code Playgroud)