从短划线中的文件中删除不重要的文本

时间:2014-02-25 17:50:29

标签: shell dash-shell

我的文件包含太多行。

它的构造如下:

Text
Text
Text

<--!Important Text begins here-->
important Text
Important Text
Important Text

<--!Important Text ends here -->

Unimportant Text
....

<--!Important Text begins here-->
important Text
Important Text
Important Text

<--!Important Text ends here -->

Unimportant Text
....<--!Important Text begins here-->
important Text
Important Text
Important Text

<--!Important Text ends here -->

Unimportant Text
....

等等。

我如何处理重要部分并将其保存在新文件中? 我正在使用Macintosh的仪表板终端

2 个答案:

答案 0 :(得分:1)

尝试以下方法:

sed -n '/<--!Important Text begins here-->/,/<--!Important Text ends here -->/ p' \
  infile | 
  fgrep -v -e '<--!Important Text begins here-->' \
           -e '<--!Important Text ends here -->' \
   > outfile

注意:假设所有<--!Important Text ...标记都在一个单独的行上。

答案 1 :(得分:1)

如果您希望包含标记,那么您可以执行以下操作:

awk '/<--!Important Text begins here-->/,/<--!Important Text ends here -->/' file

如果您想忽略标记并只打印它们之间的内容,您可以执行以下操作:

awk '
/<--!Important Text begins here-->/{p=1; next}
/<--!Important Text ends here -->/{p=0}
p' file

第一个解决方案是regex范围。它告诉awk打印范围(包括)之间的所有内容。要忽略标记,只需设置和取消设置标记即可。