파일에서 교체해야 합니다 "..."
. <...>
이 명령을 사용하여 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 질문이 원하는 대로 다른 방법이 아닌 <>
( 사용하거나 ""
문제의 줄에서 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>