【问题标题】:How to extract the text from a file between two similar strings in linux?如何从linux中两个相似字符串之间的文件中提取文本?
【发布时间】:2014-06-29 19:34:32
【问题描述】:

我有一个包含如下文本的文件

Jun  9 2014
some text...
Jun 10 2014
some text...
some text...
Jun 10 2014
some text...
Jun 10 2014
some text...
Jun 11 2014
some text...
Jun 12 2014
some text...

我尝试过使用 sed 命令,如下所示:

sed /"Jun 10 2014"/,/"Jun 10 2014"/p file_name.txt

但这只会给出第一个和第二个字符串 Jun 10 2014 之间的文本

我想提取字符串 Jun 10 2014 的第一次出现到同一字符串 Jun 10 2014 的最后一次出现之间的所有文本,包括最后一个 Jun 10 2014 到文本 Jun 11 2014 之后的文本。

【问题讨论】:

  • 您提供的输入文件的预期输出是什么?
  • June 11 2014 是否总是在 Jun 10 2014 之后?

标签: linux unix sed


【解决方案1】:

您可以使用从Jun 10 2014Jun 11 2014 的范围,但在内部进行额外的过滤:

$ sed -n '/Jun 10 2014/,/Jun 11 2014/ {/Jun 1[01] 2014/!p}' file_name.txt
some text...
some text...
some text...
some text...

【讨论】:

  • 但是如果没有Jun 11 的数据但是Jun 12 的数据怎么办
【解决方案2】:

这是一个awk 解决方案:

awk '/^Jun 10/ {f=1} /^Jun/ && !/^Jun 10/ {f=0} f && !/^Jun/' file
some text...
some text...
some text...
some text...

这将从Jun 10 打印,直到不再是Jun 10

【讨论】:

    猜你喜欢
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 2016-08-13
    • 2013-05-14
    相关资源
    最近更新 更多