假设我有很多c ++文件要添加名称空间声明。即我希望文件看起来像:
//pre-processor commands and other stuff not in the namespace
namespace foo
{
//previously existing code
}
//EOF
无需手动打开每个文件,无论如何都可以这样做?到目前为止,我能够提出的最好的是一个emacs宏来对每个文件进行操作,但我仍然必须仔细检查每个文件。
答案 0 :(得分:4)
#!/bin/bash
for f in *.h
do
line=`grep -n '^#' $f | tail -1 | cut -f1 -d:`
head -$line $f > tempfile
echo 'namespace foo {' >> tempfile
let line++
tail --lines=+$line $f >> tempfile
echo '} // end namespace foo' >> tempfile
mv tempfile $f
done
这将遍历当前目录中的每个头文件,并且:
请注意,如果您想要点击cpp文件,那么第一行必须是for f in *.h *.cpp
。但是,如果你的cpp文件有静态函数或匿名命名空间,那么这将不起作用。
请注意,这假设您的头文件没有使用经典的包含保护。它假定所有预处理器命令都在文件的顶部。如果情况并非如此,则必须进行一些调整。试试你的一些文件,根据需要进行调整,然后再尝试一些。