如何匹配gnu grep中的非字符串

时间:2013-08-22 00:42:51

标签: grep gnu

我将用一个例子来说明我的问题。假设我们有文件名'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

有没有办法覆盖这种或其他方式来解决我的问题?

1 个答案:

答案 0 :(得分:0)

也许你可以使用可以在Perl regexp中使用的非贪婪匹配

echo 'AooYoZooYZoAoooooYZ' | grep -P -o 'A.*?YZ'

但请注意,GNU grep手册中说-P选项具有很高的实验性。