我在从文件中删除一系列文本时遇到问题。请参阅下面的文件示例:
<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
来完成。但我一直无法使它发挥作用。
答案 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