파일의 작은따옴표를 큰따옴표로 바꾸기

파일의 작은따옴표를 큰따옴표로 바꾸기

/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를 사용하면 어떻게 이스케이프를 시도하더라도 작은따옴표로 묶인 문자열 안에 작은따옴표를 포함할 수 없습니다.

일부 옵션:

  1. ilkkachu가 제안한 대로 큰따옴표를 사용하십시오."s/'/\"/g"
  2. 문자열 세그먼트 연결: 's/'"'"'/"/g'또는's/'\''/"/g'
  3. 사용하다ANSI-C 인용문:$'s/\'/"/g'
  4. 전체 콘텐츠를 인용하지 말고 이스케이프해야 하는 문자를 이스케이프하세요.s/\'/\"/g

답변3

단일 문자 변경의 경우 tr아마도 가장 빠를 것입니다.

tr \' \" <infile >outfile

셸 환경에서는 두 따옴표를 모두 이스케이프해야 합니다. 또는 동일한 파일 내에서 바꾸려면 ( 패키지 sponge에서 )를 사용하십시오.moreutils

tr \' \" <infile | sponge infile

관련 정보