如何删除当前目录树中所有.xml文件含"abcfk"的行?
解决删除目录树中所有XML文件含特定字符串行的问题
你之前用的命令是替换字符串,要删除整行的话,只需要把sed的替换命令改成删除匹配行的命令就行,给你两种靠谱的方案:
方案1:find + xargs(处理带空格文件名更安全的版本)
find . -name "*.xml" -type f -print0 | xargs -0 sed -i '/abcfk/d'
-print0和xargs -0是配对使用的,能处理文件名里包含空格、特殊字符的情况,避免出错/abcfk/d是sed的核心命令:匹配所有包含"abcfk"的行,并直接删除-i让sed直接修改原文件(如果是macOS等BSD系统,需要写成sed -i '' '/abcfk/d',注意空引号不能少)
方案2:find + -exec(更简洁的原生方式)
find . -name "*.xml" -type f -exec sed -i '/abcfk/d' {} +
- 这个方式不需要xargs,直接让find把找到的文件传给sed处理,同样支持带空格的文件名
{} +表示把所有匹配的文件一次性传给sed,效率比逐个处理更高
测试小技巧
在直接修改文件前,建议先去掉-i参数跑一遍命令,看看输出的内容是不是你想要的(不会修改原文件):
find . -name "*.xml" -type f | xargs sed '/abcfk/d'
确认没问题后,再加上-i执行原地修改就放心啦。
内容的提问来源于stack exchange,提问作者A. Gupta
相关产品推荐
相关产品推荐

