【问题标题】:Kornshell - How to print up to a certain string in a fileKornshell - 如何打印文件中的某个字符串
【发布时间】:2013-09-27 22:21:44
【问题描述】:

假设有一个包含一些文本的文件,并说我们正在该文本中寻找某个字符串。在该字符串的第一个实例之前,您将如何打印该文件的内容?

【问题讨论】:

    标签: regex bash unix sed ksh


    【解决方案1】:
    sed '/\(pattern\).*/{s//\1/; q;}'
    

    【讨论】:

    • 谢谢,这正是我想要的。
    • 这个的反面会是:sed '/{s//\1/; q;}.*'/(pattern)' ?
    【解决方案2】:

    将 sed 与 q 命令一起使用:

    sed '/pattern/q' file
    

    这将打印文件直到找到pattern,然后它将退出其余的处理。

    【讨论】:

    • 如果模式在一行的中间,这个命令仍然打印出该行的其余部分。有没有办法在找到字符串后立即停止该过程?
    【解决方案3】:

    有很多方法可以做到这一点。例如,您可以使用 grep 的 -n 选项使其输出行号,提取第一个行号并使用它来指示 head 从文件中显示给定数量的行:

    head -n $(grep -n somestring file | cut -d: -f1 | head -n 1) file
    

    【讨论】:

      【解决方案4】:

      使用awk

      awk '!f; /pattern/ {f=1}' file
      

      如果f=0,如果pattern找到集合f=1,则打印行

      【讨论】:

      • 我会使用 awk '1; /pattern/{exit}' file 而不是那个命令。恕我直言,它更简单、更清晰,而且效率更高。
      • 另一个更短的版本。 awk '/search/{exit}1' file
      • 这不是相同的功能,因为它不会打印包含匹配字符串的行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      • 2022-11-16
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      相关资源
      最近更新 更多