【问题标题】:Delete All Text Before First Marker and After Second Marker删除第一个标记之前和第二个标记之后的所有文本
【发布时间】:2011-11-11 17:14:50
【问题描述】:

所以,我正在编写一个脚本,并且我有一个这样的文本文件:

blahblahblahdeleteme
<!-- post --> 
This is the text I want to keep! Pick me!!
<!-- post navigation --> 
more text please delete me I am not needed....

我想删除第一个和最后一个部分(以及标记,如果很容易做到的话)并将文本保留在中间。

现在,我知道 bash 通常不适合解析这样的文本,但由于它很简单,我想我还是坚持使用 bash。这真的像我想的那么简单吗?

我发现了这个帖子:split text file in two using bash script

我可以将它分成两个文本文件,然后再分成两个,只保留中间一个。那是我最好的选择吗?请告诉我!

【问题讨论】:

标签: parsing bash sed awk


【解决方案1】:
sed '1,/<!-- post -->/d;/<!-- post navigation -->/,$d' file
  • 从第一行到第一个标记:删除
  • 从第二个标记到文件结尾 ($) 删除

【讨论】:

    【解决方案2】:
    awk '/<\!-- post --/,/<\!-- post navigation/' file
    

    【讨论】:

      【解决方案3】:

      awk 真的很简单:

      /^<!-- post -->/ { if (start != 1)
          { start=1; firstline=1;}
      }
      
      /^<!-- post navigation -->/ {start=0;}
      
      { if (start == 1 && firstline != 1)
        { print $0; }
        firstline=0;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-19
        • 1970-01-01
        • 1970-01-01
        • 2011-10-02
        • 2014-09-14
        • 2017-06-14
        相关资源
        最近更新 更多