OSX - 更改文件包括从尖括号到双引号的指令

时间:2014-08-19 08:17:15

标签: sed

我有大约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”:命令代码无效。

2 个答案:

答案 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'