我需要修改很多源代码,只需从
开始#include <headerA.h>
到
#include "headerA.h"
我尝试了一些sed,awk命令但不完全确定如何继续这个。我正在使用Ubuntu平台。任何意见都将非常感谢!
答案 0 :(得分:4)
这样做:
sed -i '/^#include/s/[<>]/"/g' filename
开头的/^#include/
地址告诉sed
仅对以#include
开头的行执行替换。 [<>]
是一个与<
或>
匹配的正则表达式,它们被"
替换,g
修饰符告诉它替换所有出现的内容这条线,而不仅仅是第一条。
答案 1 :(得分:1)
首先将find
与sed
一起使用,然后使用mv
find . -name <ol_file_nme> -exec sed 's/[<>]/"/g' '{}' \; -print > <new_file_name>
mv <new_file_name> <ol_file_nme>
答案 2 :(得分:1)
这应该编辑每个文件:
find . -name '*.[ch]' -exec \
sed -i 's|^#include[[:blank:]]\{1,\}<\([^>]\{1,\}\)>[[:blank:]]*$|#include "\1"|' '{}' \;
答案 3 :(得分:0)
这可能适合你(GNU sed):
sed '/#include/y/<>/""/' file
专注于包含标题的行并翻译(y/.../.../
)所需的字符。
答案 4 :(得分:0)
find /Your/Source/Path \
-name '*.[ch]' \
-exec \
sed -i '/^#include[[:blank:]]/ s/<\([^>]*\)>/"\1"/g' "{}" \
\;
会改变:
.h
.c
或/Your/Source/Path
的文件
<>
周围的任何文字,其中双文引号相同
#include
答案 5 :(得分:0)
sed -i -E "s/^(#include )[\<]([^\>]+)[\>]/\1\\\"\2\\\"/g" sourcefile.c
或者,因为我们不需要在规则内进行变量替换,只需用单引号将
:sed -i -E 's/^(#include )[\<]([^\>]+)[\>]$/\1"\2"/g'
遍历工作目录的所有子目录以查找* .c和* .h文件,并将尖括号替换为引号:
find . \( -name "*.c" -o -name "*.h" \) -print0 | xargs -n1 -0 sed -i -E 's/^(#include )[\<]([^\>]+)[\>]$/\1"\2"/g'