如何查找XML文件并注释包含'dark'字符串的行?
问题分析与解决
你的问题出在:当前命令只是把注释后的XML内容输出到终端,并没有修改原文件,所以看起来像是“执行失败”;而单独执行awk命令时,你能看到正确的输出,但同样没有对原文件做修改——只是你可能误以为它生效了而已。
方案1:用GNU awk的就地编辑功能(推荐)
如果你的系统安装的是GNU awk 4.1及以上版本,可以直接用它的-i inplace选项实现就地修改文件,不需要临时文件:
find . -name "*.xml" -print0 | while read -d $'\0' file; do # 直接修改原文件,若需要备份可以加 -v INPLACE_SUFFIX=.bak awk -i inplace '{print "<!--"$0"-->"}' "$file" done
加上-v INPLACE_SUFFIX=.bak的话,会给每个原文件生成一个带.bak后缀的备份,操作更安全。
方案2:用临时文件过渡(兼容所有awk版本)
如果你的awk不支持就地编辑,可以先把处理后的内容写入临时文件,确认写入成功后再替换原文件:
find . -name "*.xml" -print0 | while read -d $'\0' file; do awk '{print "<!--"$0"-->"}' "$file" > "$file.tmp" && mv "$file.tmp" "$file" done
这种方式兼容性更强,而且&&能保证只有当awk处理成功、临时文件写入完成时,才会替换原文件,避免意外损坏目标文件。
补充说明:你的find + print0 + read -d $'\0'的写法是正确的,能完美处理包含空格、特殊字符的文件名,这部分无需调整~
内容的提问来源于stack exchange,提问作者Ari Aaltonen
相关产品推荐
相关产品推荐

