【问题标题】:Match from pattern to end of file in bash在bash中从模式匹配到文件末尾
【发布时间】:2011-09-19 18:07:46
【问题描述】:

我一直试图弄清楚如何在 bash 脚本中使用 grep 来匹配从模式到文件末尾的内容。该文件每次的行数并不总是相同,也不总是[A-Za-z0-9]。我正在尝试从基于平面文件的目录迁移到数据库。

文件摘录:

First, Last: Doe, John
ID: xxxxxxxx
...

Case Notes:

This "person" does not exist!  
Please do not add him. 
Thanks.

我需要抓取从Case Notes: 到文件末尾的所有内容。由于没有真正的 EOF 字符,我似乎找不到任何帮助。

想法?

【问题讨论】:

    标签: regex bash eof


    【解决方案1】:

    awk 脚本可能更简单:

    awk '/^Case Notes:$/ { matched = 1 } matched'
    

    或者,如果您不想看到 Case notes: 字符串本身,请将其反转:

    awk 'matched; /^Case Notes:$/ { matched = 1 }'
    

    【讨论】:

    • 谢谢。那几乎做到了。我不得不将其修改为: awk '/^Case Notes:.*$/ {matched = 1 }matched { print }' 但它奏效了!谢谢。
    【解决方案2】:

    惯用的awk 解决方案是

    awk '/^Case Notes:$/,0'
    

    从模式(包括)打印到文件末尾。

    【讨论】:

      【解决方案3】:
      sed -n '/^Case notes:/,$p' file >newfile
      

      【讨论】:

        【解决方案4】:

        晚了几年,但你可以使用

        more +"Case notes:" file
        

        【讨论】:

          【解决方案5】:

          bash可以做到

          declare -i tf=0
          while read -r line
          do
             case "$line" in
               *"Case notes"* ) tf=1;
             esac
             [[ $tf -eq 1 ]] && echo "$line"
          done < file
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-03-26
            • 1970-01-01
            • 2015-12-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-10-12
            相关资源
            最近更新 更多