如何用引号替换尖括号

时间:2015-05-18 20:40:01

标签: linux string replace awk sed

我需要修改很多源代码,只需从

开始
#include <headerA.h>

#include "headerA.h"

我尝试了一些sed,awk命令但不完全确定如何继续这个。我正在使用Ubuntu平台。任何意见都将非常感谢!

6 个答案:

答案 0 :(得分:4)

这样做:

sed -i '/^#include/s/[<>]/"/g' filename

开头的/^#include/地址告诉sed仅对以#include开头的行执行替换。 [<>]是一个与<>匹配的正则表达式,它们被"替换,g修饰符告诉它替换所有出现的内容这条线,而不仅仅是第一条。

答案 1 :(得分:1)

首先将findsed一起使用,然后使用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'