grep regex返回子字符串但排除注释

Dan*_*l_H 5 regex grep

我想从文件中获取子字符串,但只能从没有感叹号的行(它是Fortran中的注释符号)中获取.我更喜欢使用grep(但不是绑定).例如:

infile.txt:

calib_ss/baseline.txt
!calib_ss/base_sharpe.txt
Run Code Online (Sandbox Code Playgroud)

期望的结果:

baseline
Run Code Online (Sandbox Code Playgroud)

我到目前为止:

grep -Po "(?<=/)[^/.]*(?=\.)" infile.txt
Run Code Online (Sandbox Code Playgroud)

返回

baseline
base_sharpe
Run Code Online (Sandbox Code Playgroud)

排除以!开头的行!我想把表达与...结合起来

^[^\!]
Run Code Online (Sandbox Code Playgroud)

但我没有管理.提前致谢!

anu*_*ava 4

这个 grep 应该可以工作:

grep -Po '^[^!].*?(?<=/)\K[^/.]*(?=\.)' infile.txt
Run Code Online (Sandbox Code Playgroud)

输出:

baseline
Run Code Online (Sandbox Code Playgroud)

解释:

  • ^[^!]将确保匹配除!行开头之外的任何内容
  • \K将确保重置开始