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

时间:2013-08-15 10:48:54

标签: regex grep

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

infile.txt:

calib_ss/baseline.txt
!calib_ss/base_sharpe.txt

期望的结果:

baseline

我到目前为止:

grep -Po "(?<=/)[^/.]*(?=\.)" infile.txt

返回

baseline
base_sharpe

排除以!开头的行!我想到将表达式与

结合起来
^[^\!]

但我不管理。提前谢谢!

1 个答案:

答案 0 :(得分:4)

这个grep应该可以工作:

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

<强>输出:

baseline

<强>解释

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