![sed 命令将多行文本替换为空](https://linux22.com/image/1494722/sed%20%E5%91%BD%E4%BB%A4%E5%B0%86%E5%A4%9A%E8%A1%8C%E6%96%87%E6%9C%AC%E6%9B%BF%E6%8D%A2%E4%B8%BA%E7%A9%BA.png)
我有一个 XML 文件,其中包含如下所示的部分。
<Target name=something>
< other content here>
</Target>
现在如何使用 sed 命令从文件中删除此内容?我尝试了以下方法,但没有用。
sed -ir 's/\<Target Name\=.*.\<\/Target\>//g' filename
请指教。
答案1
您应该使用 XML 工具来操作 XML 结构
sed 旨在逐行处理内容,您可能需要使用 awk 来解决这种类型的替换。
要使用 awk 解决您的问题:
awk '/<Target /,/<\/Target>/ { next } 1' your_file
编辑:
刚刚发现:sed 可以做同样的事情
sed '/<Target /,/<\/Target>/d' your_file
答案2
约翰实际上已回答-i
问题的大部分内容。但是,我注意到您打算通过提供选项来进行就地编辑sed
。请注意,此选项采用可选参数 SUFFIX。如果提供了 SUFFIX,则通过在其名称中添加 SUFFIX 来备份输入文件。命令行中很可能出现的问题是,中的字母“r”-ir
被解释为备份后缀,而不是单独的选项-r
。为了达到预期的效果(当您不想在就地编辑期间备份文件时),请不要将其他选项与-i
(或确保i
始终放在最后)组合使用:
# All these do the same thing (in-place editing using extended regular expressions)
sed -r -i ...
sed -i -r ...
sed -ri ...
# This one backs up input files by appending the letter 'r' to their names
# (and DOES NOT use extended regular expressions)
sed -ir ...