我需要在文件中替换"..."
为。<...>
我用过这个命令sed '/^#include/s/"/</g' file.c
发现这里,但输出不正确。我怎样才能解决这个问题?
输入:
#include "stdlib.h"
#include "graph.h"
输出:
#include <stdlib.h<
#include <graph.h<
预期输出:
#include <stdlib.h>
#include <graph.h>
答案1
该命令的问题在于g
最后。会导致全部<
每行匹配的双引号都被替换^#include
。请注意您链接到的 StackOverflow 问题如何涉及替换 with <>
(""
可以在相关行上使用y/<>/""/
或效率较低的使用来完成s/[<>]/"/g
),而不是像您想要的那样相反。
如果你先使用s/"/</
(no g
) 然后使用s/"/>
(g
这里也不是),那就没问题了:
sed '/^#include/ { s/"/</; s/"/>/; }' file.c >file-new.c
第一个替换替换第一个双引号,第二个替换替换现在修改的字符串中的第一个双引号。
要更正文件(假设您进行了就地编辑),只需将<
行末尾的替换为>
:
sed '/^#include/ s/<$/>/' file.c >file-new.c
这匹配<$
(<
行末尾的 an),并将其替换为>
。
查看结果,如果看起来没问题,file-new.c
则将其替换。file.c
答案2
您需要将两个相同的字符替换"
为两个清楚的字符<
和>
.您的命令不起作用,因为它会替换所有出现的一个"
字符一仅限字符<
。所以试试这个:
# capture the final word between double quotes
# and replace it for itself enclosed in brackets
$ sed '/^#include/s/"\([^"]*\)"/<\1>/' file
#include <stdlib.h>
#include <graph.h>