sed 命令将多行文本替换为空

sed 命令将多行文本替换为空

我有一个 XML 文件,其中包含如下所示的部分。

<Target name=something>
     < other content here>
</Target>

现在如何使用 sed 命令从文件中删除此内容?我尝试了以下方法,但没有用。

sed -ir  's/\<Target Name\=.*.\<\/Target\>//g' filename

请指教。

答案1

  1. 您应该使用 XML 工具来操作 XML 结构

  2. 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 ...

相关内容