我将用一个例子来说明我的问题。假设我们有文件名'file.txt',其中包含以下字符串:
AooYoZooYZoAoooooYZ
我想使用grep查找所有以'A'开头并以'YZ'结尾但在'A'和'YZ'之间不包含'YZ'的子串。所需的输出是:
AooYoZooYZ
AoooooYZ
我最好的猜测是做以下事情:
$ grep -E -o'A [^(YZ)] * YZ'file.txt
但输出只是:
AoooooYZ
我希望括号能够为YZ保留其含义,但我在GNU grep手册(http://www.gnu.org/software/grep/manual/grep.html)中读到: “大多数元字符在括号表达式中失去了特殊含义。”我也试过了:
$ grep -E -o'A。* YZ file.txt
但这会输出整行:
AooYoZooYZoAoooooYZ
有没有办法覆盖这种或其他方式来解决我的问题?
答案 0 :(得分:0)
也许你可以使用可以在Perl regexp中使用的非贪婪匹配
echo 'AooYoZooYZoAoooooYZ' | grep -P -o 'A.*?YZ'
但请注意,GNU grep手册中说-P选项具有很高的实验性。