我的输入 XML 文件如下所示
输入 XML 文件
<Formula>
<Name>Total Hate Fee</Name>
<Code>1234>
<Job>BO</Job>
<Type>sub</Type>
</Formula>
<Formula>
<Name>Total BO Fee</Name>
<Code>1234>
<Job>BO</Job>
<Type>sub</Type>
</Formula>
<Formula>
<Name>Total BO Fee</Name>
<Code>1234>
<Job>BO</Job>
<Type>sub</Type>
</Formula>
我希望我的 shell 脚本搜索模式“Total Hate Fee”,如果找到该模式,那么我想评论该特定行添加<!--
并-->
仅在模式匹配处,以便我的输出如下所示
输出 XML 文件
<Formula>
<--<Name>Total Hate Fee</Name>-->
<Code>1234>
<Job>BO</Job>
<Type>sub</Type>
</Formula>
<Formula>
<Name>Total BO Fee</Name>
<Code>1234>
<Job>BO</Job>
<Type>sub</Type>
</Formula>
<Formula>
<Name>Total BO Fee</Name>
<Code>1234>
<Job>BO</Job>
<Type>sub</Type>
</Formula>
谁能帮我解决这个问题吗?请注意,我不想使用xmlstartet
工具。相反,我想使用 shell 脚本
答案1
你就快到了。我刚刚添加了第二行 ed 代码,它看起来比匹配行低 4 行。
printf '%s\n' \
'g/Total Hate Fee/-1 s/^/<!--/' \
'g/Total Hate Fee/+4 s/$/-->/' \
'w newfile.xml' 'q' \
| ed -s file.xml;
答案2
awk -v pattern="$yourMatch" '
$0 ~ pattern{ $0= "<!--" $0 "-->" }1' infile
请注意,在上面pattern
,将作为正则表达式与$0
我们使用的进行匹配;要用作pattern
字符串,请按以下方式使用:
awk -v string="$yourMatch" '
{ if(index($0, string)) $0= "<!--" $0 "-->" }1' infile