我在文本文件中搜索,我必须在成功匹配后选择一行。
实施例
问题:
我想在搜索关键字/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的帮助下完成这项工作? 有人能指出我的解决方案吗?
问候。
答案 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>