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)
您也可以在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)