我有大约1000个带尖括号的文件包含指令。我想用任何类型的脚本更改此指令,如下例所示:
#include <file.h>
为:
#include "file.h"
或
#include <dir/file.h>
到
#inlcude "dir/file.h"
提前致谢。
----编辑----- 我试过这个剧本:
for myfile in $(find ./include); do
sed -i '/^#include/s/<\([^>]*\)>/"\1"/' "${myfile}" > /dev/null
done
但结果是: sed:1:“。/ include / DIR / FILE.h”:命令代码无效。
答案 0 :(得分:3)
sed '/^#[[:blank:]]*include/s/<\([^>]*\)>/"\1"/' your_input
这只会修改以#include
开头的行,在这些行中,它会< ... >
替换" ... "
,使用反向引用(\1
)来指定内部的内容括号中。
如果您想在多个文件上执行此操作,只需将其包含在Bash循环中,使用GNU sed 的-i
选项直接转换为文件:
for myfile in ...
do
sed -i'' '/^#[[:blank:]]*include/s/<\([^>]*\)>/"\1"/' "${myfile}"
done
答案 1 :(得分:0)
假设您的文件位于目录directory-name
:
grep -rl '#include <.*>' directory-name/ | xargs sed -i 's/#include <\(.*\)>/#include "\1"/g'