使用扩展正则表达式排除Grep中的模式

时间:2017-05-22 11:05:02

标签: regex bash unix grep

我有一个正在杀了我的Grep

假设我得到了一个带有以下两个条目的文件(file.xml):

  • pos_ADF_datasource-1450-jdbc.xml中
  • 数据源-1450-jdbc.xml中

现在如果我运行以下grep:

grep -E '(ADF)' file.txt

我得到了以下输出:

pos_ADF_datasource-1450-jdbc.xml

现在我想要排除ADF以获取其他条目,它应该很简单,但我尝试了所有这些并且我无法让它工作:

grep -E '(?<!ADF)' file.txt

我尝试了很多,但我确定有一些事情我没有考虑到这使得我的表达不起作用......

我需要并且想要使用-E,我知道它不能使用扩展的正则表达式!

请让我点亮我!

已解决:

感谢Wiktor的以下考虑:

  

ERE POSIX不支持外观。即使你使用-P排除&#39; ADF&#39;它只会匹配任何前面没有ADF的位置

     

如果字符串不包含模式,则无法使用ERE正则表达式进行检查。只有它不相等时才会以模式开始/结束。您只能使用PCRE正则表达式执行此操作。 grep -P&#39; ^(?!。* ADF)&#39; file.txt的

然后我用grep -Pe:

想出来了
grep -Pe "^((?!.*ADF).)*-jdbc.xml$" file.xml

0 个答案:

没有答案