从文件中删除文本

时间:2015-12-19 02:43:26

标签: sed

我在从文件中删除一系列文本时遇到问题。请参阅下面的文件示例:

<transaction>
some text
some text
some text
</transaction>
<transaction>
some text
some text
some text
</transaction>
<transaction>
some text
some text
some text
</transaction>

我只想从第一个<transaction>开头删除,然后以。结尾 第一个:</transaction>。删除应包括<transaction></transaction>

我认为这可以使用sed来完成。但我一直无法使它发挥作用。

4 个答案:

答案 0 :(得分:1)

awk '/transaction/ {b++} b>2'

输出:

<transaction>
some text
some text
some text
</transaction>
<transaction>
some text
some text
some text
</transaction>

答案 1 :(得分:0)

如果您的输入与示例中的输入相似,则可以使用awk更轻松地执行此操作:

awk '{ if (p) print $0 }; $0=="</transaction>" { p = 1 }' input.txt

修改

如果你需要跳过例如第4 <transaction>行到下一行的行:

awk 'BEGIN { p = 0 }; $0=="<transaction>" { p++ }; { if (p != 4) print $0 }' input.txt

答案 2 :(得分:0)

如果您只想删除带标签的行,请使用:

sed -e '/<\/\?transaction>/d' file.txt

如果要删除标签和文本,请使用:

sed -e '/<transaction>/,/<\/transaction>/d' file.txt

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed -n '/<transaction>/{:a;n;/<\/transaction>/!ba;:b;n;p;bb};p' file

这会将sed调用置于grep模式。在<transaction>的第一个实例之前打印任何行,之后不打印和行,直到标记</transaction>通过,然后打印文件的其余部分。

另一种解决方案希望文本形成良好:

sed '1,/<\/transaction>/{/<transaction>/h;G;//!P;d}' file