/tmp/myfile에 포함된 모든 작은따옴표 '를 "(큰따옴표)로 바꿔야 합니다.
나는 이것을 사용하고 있습니다
sed -i 's/'/\"/g' /tmp/myfile
그리고 다른 조합을 시도했지만 작동하는 방법을 찾을 수 없습니다.
도움을 주세요.
답변1
바꾸다아포스트로피( '
) sed 명령을 넣는 것이 가장 쉽습니다.더블교체 시 큰따옴표를 따옴표로 묶고 이스케이프 처리합니다.
$ cat quotes.txt
I'm Alice
$ sed -e "s/'/\"/g" quotes.txt
I"m Alice
작은따옴표는 다음과 같습니다.아니요큰따옴표는 특별하므로 이스케이프할 수 없습니다.
반대로 누군가 교체하고 싶다면백틱( `
)는 원래 질문에서 언급했듯이 작은따옴표 안에 있는 그대로 사용할 수 있습니다.
$ cat ticks.txt
`this is in backticks`
$ sed -e 's/`/"/g' ticks.txt
"this is in backticks"
큰따옴표 내에서 백틱을 백슬래시로 이스케이프해야 합니다. 그렇지 않으면 이전 형식 명령 대체가 시작됩니다.
또한보십시오:
답변2
Bash를 사용하면 어떻게 이스케이프를 시도하더라도 작은따옴표로 묶인 문자열 안에 작은따옴표를 포함할 수 없습니다.
일부 옵션:
- ilkkachu가 제안한 대로 큰따옴표를 사용하십시오.
"s/'/\"/g"
- 문자열 세그먼트 연결:
's/'"'"'/"/g'
또는's/'\''/"/g'
- 사용하다ANSI-C 인용문:
$'s/\'/"/g'
- 전체 콘텐츠를 인용하지 말고 이스케이프해야 하는 문자를 이스케이프하세요.
s/\'/\"/g
답변3
단일 문자 변경의 경우 tr
아마도 가장 빠를 것입니다.
tr \' \" <infile >outfile
셸 환경에서는 두 따옴표를 모두 이스케이프해야 합니다. 또는 동일한 파일 내에서 바꾸려면 ( 패키지 sponge
에서 )를 사용하십시오.moreutils
tr \' \" <infile | sponge infile