要删除中的注释(以#
和开头/* comment */
)settings.php
,以下命令就可以了:
sed '/^\#/d' settings.php > outp.txt
mv outp.txt settings.php
sed '/\/\*/,/*\//d; /^\/\//d; /^$/d;' settings.php > outp2.txt
mv outp2.txt settings.php
sed '/^$/d' settings.php > outp3.txt
mv outp3.txt settings.php
但是如何删除所有文件(包括子目录中的注释)的注释?
答案1
从您想要遍历的目录开始,您可以使用find ./ -type f -name '*.php' -print0 | xargs -0 sed -i '/^\#/d'
。xargs 为 sed 构建参数列表以获得更好的性能,并且 sed 的 -i 选项会就地替换模式(您不必使用重定向)。
编辑:根据手册页寻找 find ./ -name '*.php' -type f -print0 | xargs -0 sed -i '/^\#/d'
甚至更快,因为它不调用统计在每个文件上(-type 选项)。
答案2
您可以使用 -i 来“就地”执行 sed。您可以像这样用分号连接 sed 命令:“c1;c2;c3”您可以使用 find 执行命令 - 无需 | xargs。
find ./somedir -name "*.php" -execdir sed -i '/^\#/d;/\/\*/,/*\//d; /^\/\//d; /^$/d;;/^$/d' {} +
这适用于 Linux 上的 gnu-find;也许您的 find 没有 -execdir,-exec 也应该可以工作,也许它没有 +,那么“;”将是一个简单但不是那么快的解决方案,或者使用上面 p.vitzliputzli 所示的 xargs,并使用 Matt 对带有空格和特殊字符的文件名的改进是一种替代方法。
答案3
你可以在 Ex 模式下使用 Vim:
find -name '*.php' -exec ex -sc g/^#/d -cx {} ';'
g
全局搜索d
删除x
保存并关闭