正则表达式搜索在Notepad ++中有效,但在cygwin grep中没有

时间:2015-05-26 09:42:41

标签: regex bash

我在文本文件中搜索,我必须在成功匹配后选择一行。

实施例 问题: 我想在搜索关键字/abc/xyz之后选择一行的内容 样本文件

90:538566 : Mike : Important : Comment : Deferred/Accepted : /abc/xyz/FileName1.hxx#2 (18)' 223:537558 : Mike : Important : Comment : Deferred/Accepted : /abc/xyz/FileName2.hxx#2 (12) 266:537562 : Mike : Important : Comment : Deferred/Accepted : /abc/xyz/FileName3.hxx#2 (23) 381:537576 : Mike : Important : Comment : Deferred/Accepted : /abc/xyz/FileName3.cxx#2 (215 - 216) 394:537577 : Mike : Important : Comment : Deferred/Accepted : /abc/xyz/FileName4.cxx#2 (231)

预期产出

FileName1.hxx#2 (18) FileName2.hxx#2 (12) FileName3.hxx#2 (23) FileName3.cxx#2 (215 - 216) FileName4.cxx#2 (231)

我正在使用Notepad ++使用正则表达式模式进行此类搜索并搜索以下表达式

(?<=/abc/xyz/).*

但我无法使用Cygwin发行版附带的GNU grep进行相同类型的搜索。

我尝试了以下搜索,但没有返回任何结果 grep '(?<=/abc/xyz/).*' <filename.txt>

我想学习正则表达式并弄清楚如何在grep的帮助下完成这项工作? 有人能指出我的解决方案吗?

问候。

1 个答案:

答案 0 :(得分:2)

使用grep的-Po选项

-P Perl Regex
-o仅打印匹配

grep -Po '(?<=/abc/xyz/).*' <filename.txt>

FileName1.hxx#2 (18)
FileName2.hxx#2 (12)
FileName3.hxx#2 (23)
FileName3.cxx#2 (215 - 216)
FileName4.cxx#2 (231)

您也可以使用\K代替?<=

grep -Po '/abc/xyz/\K.*' <filename.txt>