删除第一个标记之前和第二个标记之后的所有文本

时间:2011-09-06 22:30:23

标签: parsing bash sed awk

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

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

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

awk '/<\!-- post --/,/<\!-- post navigation/' file

答案 2 :(得分:1)

awk

真的很容易
/^<!-- post -->/ { if (start != 1)
    { start=1; firstline=1;}
}

/^<!-- post navigation -->/ {start=0;}

{ if (start == 1 && firstline != 1)
  { print $0; }
  firstline=0;
}