【问题标题】:shell command to extract after a string1 and before string 2 [duplicate]在字符串1之后和字符串2之前提取的shell命令[重复]
【发布时间】:2014-01-26 19:44:29
【问题描述】:

我有一个文本文件,我想使用 grep、awk、sed 等 unix shell 命令在“String1”之后和“String2”之前提取该文本文件。 部分文本文件如下(我需要在“Specific”之后,第二个虚线之前):

    ------------------
    Specific:
    line1
    line2
    ------------------
    line3

【问题讨论】:

  • 太好了,只是一个简单的问题:我如何提取 After 和 Before。呈现的代码采用以模式开头的行
  • 为了更清楚,您的预期输出是什么?

标签: shell scripting sed awk grep


【解决方案1】:

基于Extract lines between two patterns from a file:

$ awk '/------------------/ {p=0}; p; /Specific/ {p=1}'  file
line1
line2

引用我自己的解释:

  • 当它找到pattern1,然后使变量p=1。
  • 它只在p==1 时打印行。这是通过p 条件完成的。如果为真,则执行默认的 awk 动作,即 print $0。否则,它不会。
  • 当它找到pattern2,然后使变量p=0。由于在p 条件之后检查此条件,因此它将打印其中的行 pattern2 首次出现。

所以不同的是在打印之前检查------------------行,这样就可以停止标志。并且打印后检查Specific行,这样就开启了flag而不打印这个特定的行。

也可以在设置p=1 之后使用next 来完成,所以awk 跳转到下一行:

awk '/------------------/ {p=0} /Specific/ {p=1; next} p' file

【讨论】:

  • +1 不错的答案和很好的解释。
  • @fedorqui 非常感谢。精彩的解释 - 很大的帮助
  • @Ramin 很高兴它对您有用 :) 此外,如果您的问题得到解决,您可以接受答案。
猜你喜欢
  • 2015-06-06
  • 2018-06-27
  • 1970-01-01
  • 1970-01-01
  • 2019-08-19
  • 2018-08-21
  • 1970-01-01
  • 2019-08-08
  • 2014-11-05
相关资源
最近更新 更多