regex - grep正则表达式返回子字符串但排除注释

标签 regex grep

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

文件.txt:

calib_ss/baseline.txt
!calib_ss/base_sharpe.txt

想要的结果:
baseline

我走了这么远:
grep -Po "(?<=/)[^/.]*(?=\.)" infile.txt

返回
baseline
base_sharpe

排除以 ! 开头的行我想结合表达
^[^\!]

但我不管理。提前致谢!

最佳答案

这个 grep 应该工作:

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

输出:
baseline

说明:
  • ^[^!]将确保匹配除 ! 之外的任何内容在线开始
  • \K将确保重置开始
  • 关于regex - grep正则表达式返回子字符串但排除注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18251154/

    相关文章:

    algorithm - 在大量文件中搜索固定字符串的静态列表

    regex - 如果不等于 2 个值中的任何一个,则 awk 替换列值

    javascript - 如何使用正则表达式在 javascript 中通过 id 获取元素?

    regex - Bash:逐行遍历文件,找到特定的字符串并附加到每个后续行,直到找到相同的字符串

    linux - 从 bash 脚本中的文本文件验证帐户创建

    awk - 根据常见字符串的出现重新索引两位数字字符串

    regex - 最新的 Perl 不会匹配某些长度超过 32768 个字符的正则表达式

    regex - 解析字符串并在perl中执行操作

    c++ - 转义字符串中的反斜杠?

    regex - Linux grep 表达式停止匹配,直到找到一个 windows 回车符