sed를 사용하여 "단일" 아포스트로피를 "이중" 아포스트로피로 바꾸는 방법 [중복]

sed를 사용하여 "단일" 아포스트로피를 "이중" 아포스트로피로 바꾸는 방법 [중복]

이중 아포스트로피 대신 단일 아포스트로피를 사용해 보세요. 하지만 제대로 할 수 없었습니다.

sed 's/'/"/'

답변1

Bourne과 같은 셸에서는 작은 따옴표를 작은 따옴표 안에 이스케이프할 수 없으므로 '\''셸 명령줄이나 스크립트에서 작은 따옴표로 묶인 문자열 안에 작은 따옴표를 "포함"하는 표준 방법도 마찬가지입니다. 실제로 작은따옴표를 포함하지는 않지만 원하는 최종 결과를 얻습니다.

'\''= '(따옴표 끝) \'(따옴표 이스케이프) 및 '(따옴표 열기).

즉, 그렇지 않습니다:

sed 's/'/"/g'

사용:

sed 's/'\''/"/g'

또는 큰따옴표 내에서 백슬래시로 이스케이프 처리할 수 있으므로 다음을 사용할 수 있습니다.

sed "s/'/\"/g"

이 형식에 주의하세요. 문자열 리터럴로 처리하려는 셸 메타 문자를 큰따옴표로 묶어 이스케이프해야 합니다. 예를 들어 foo 를 현재 쉘 변수의 값으로 대체 하는 sed 's/foo/$bar/'문자열 리터럴로 대체합니다 (정의되지 않은 경우 아무것도 대체되지 않습니다. 참고: 변수의 일부 값은 sed 명령을 중단할 수 있습니다. 예를 들어 정의된 구분 기호가 , 이로 인해 sed 명령에서 구문 오류가 발생함 )$barsed "s/foo/$bar/"$bar$bar$barbar='a/b's/foo/a/b/

또 다른 (아마도 가장 좋은) 대안은 따옴표를 사용하여 $''문자열을 인용하는 것입니다. 이 인용 스타일을 사용하면 작은따옴표를 이스케이프할 수 있습니다. 이는 쉘이 인용된 문자열을 해석하는 방식을 변경하므로 문자열에 다른 이스케이프 문자나 문자 시퀀스가 ​​포함된 경우 다른 부작용이 있을 수 있습니다(예 \xHH: "HH"는 내부 8비트 문자의 16진수로 해석되지만 $''). 따옴표가 없거나 큰따옴표 안에 있으면 일반 텍스트 "xHH"로 해석됩니다.

sed $'s/\'/"/g'

참고: $''bash, ksh, zsh 등에 적용됩니다. 에서는 작동하지 않습니다 dash.

답변2

사용 tr(전체 파일에서 전역적으로 이 작업을 수행하려는 경우):

tr "'" '"' <infile >outfile

행위

sed 's/'/"/'

기본적으로 슬래시와 닫히지 않은 큰따옴표 문자열인 를 sed 's/'따릅니다 ./"/'

그리고

sed s/\'/\"/

그런 문제는 없습니다.

sed표현을 인용하는 것이 더 나을 것 같으면 (이 경우에는 필요하지 않음) 다음을 수행하십시오.

sed 's/'"'"'/"/'

sed 's/'다음은 ( "'"큰따옴표 작은따옴표)이고 그 다음은 입니다 '/"/'.

tr또한 시뮬레이션하려는 경우, 즉 sed단일 문자 음역을 수행하려는 경우 다음을 사용 y///하십시오.많은다음을 사용하는 것보다 더 효율적입니다 s///g(참고 /g):

sed y/\'/\"/

답변3

  echo "don't forget that" | sed 's/\x27/\"/'

답변4

전체 sed표현식을 인용할 필요는 없습니다.

echo \' | sed s/\'/\"/

관련 정보