我需要更换"..."同<...>在一个文件中。我已经使用这个命令sed '/^#include/s/"/</g' file.c找到这里,但输出不正确。我怎样才能解决这个问题?
输入:
#include "stdlib.h"
#include "graph.h"
Run Code Online (Sandbox Code Playgroud)
输出:
#include <stdlib.h<
#include <graph.h<
Run Code Online (Sandbox Code Playgroud)
预期输出:
#include <stdlib.h>
#include <graph.h>
Run Code Online (Sandbox Code Playgroud)
Kus*_*nda 13
命令的问题g在最后。它将导致在匹配的每一行上替换所有双引号。请注意您链接到的 StackOverflow 问题如何与替换with (可以在相关行上使用或效率较低地使用来完成),而不是您想要的相反方式。<^#include<>""y/<>/""/s/[<>]/"/g
如果您先使用s/"/</(no g) 然后使用s/"/>(no ghere or),您就可以了:
sed '/^#include/ { s/"/</; s/"/>/; }' file.c >file-new.c
Run Code Online (Sandbox Code Playgroud)
第一个替换替换第一个双引号,第二个替换替换现在修改后的字符串中的第一个。
要更正文件(假设您进行了就地编辑),只需<将行尾的替换为>:
sed '/^#include/ s/<$/>/' file.c >file-new.c
Run Code Online (Sandbox Code Playgroud)
这匹配<$(<行尾的an ),并将其替换为>.
查看结果file-new.c,file.c如果看起来没问题,则用它替换。
sch*_*ity 10
您需要"为两个不同的字符<和替换两个相等的字符>。您的命令不起作用,因为它仅将一个字符的所有出现替换"为一个字符<。所以试试这个:
# 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>
Run Code Online (Sandbox Code Playgroud)