任务如下:从所有*.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}