删除具有特定扩展名的文件中的行

删除具有特定扩展名的文件中的行

任务如下:从所有*.h*.cpp文件中删除以 开头的行/

从当前目录(或指定目录)删除可以正常工作,如果目录中有子目录,则不起作用。这里:

find . -iname '*.h' | sed -i '' '/\//d' *.h

你能帮忙吗?

答案1

find在您的代码中,和之间没有真正的联系,sed因为您告诉sed只处理*.h当前目录中的文件而不处理其他任何内容。

sed处理找到的所有文件的正确方法find是:

find . -iname '*.h' -exec sed -i -e '/\//d' {} +

如果您想要一次性处理两者,.h.cpp可以在以下参数中使用逻辑表达式find

find . \( -iname '*.h' -o -iname '*.cpp' \) -exec sed -i -e '/\//d' {} +

如果要处理的文件数量合理(所有名称/路径的总长度小于 2MB),您还可以使用bash高级文件模式 abd 括号扩展:

shopt -s globstar   ## enables "**" matching of directories

sed -i -e '/\//d' **/*.{cpp,h}

相关内容