![sed를 사용하여 "단일" 아포스트로피를 "이중" 아포스트로피로 바꾸는 방법 [중복]](https://linux55.com/image/129302/sed%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%22%EB%8B%A8%EC%9D%BC%22%20%EC%95%84%ED%8F%AC%EC%8A%A4%ED%8A%B8%EB%A1%9C%ED%94%BC%EB%A5%BC%20%22%EC%9D%B4%EC%A4%91%22%20%EC%95%84%ED%8F%AC%EC%8A%A4%ED%8A%B8%EB%A1%9C%ED%94%BC%EB%A1%9C%20%EB%B0%94%EA%BE%B8%EB%8A%94%20%EB%B0%A9%EB%B2%95%20%5B%EC%A4%91%EB%B3%B5%5D.png)
이중 아포스트로피 대신 단일 아포스트로피를 사용해 보세요. 하지만 제대로 할 수 없었습니다.
sed 's/'/"/'
답변1
Bourne과 같은 셸에서는 작은 따옴표를 작은 따옴표 안에 이스케이프할 수 없으므로 '\''
셸 명령줄이나 스크립트에서 작은 따옴표로 묶인 문자열 안에 작은 따옴표를 "포함"하는 표준 방법도 마찬가지입니다. 실제로 작은따옴표를 포함하지는 않지만 원하는 최종 결과를 얻습니다.
'\''
= '
(따옴표 끝) \'
(따옴표 이스케이프) 및 '
(따옴표 열기).
즉, 그렇지 않습니다:
sed 's/'/"/g'
사용:
sed 's/'\''/"/g'
또는 큰따옴표 내에서 백슬래시로 이스케이프 처리할 수 있으므로 다음을 사용할 수 있습니다.
sed "s/'/\"/g"
이 형식에 주의하세요. 문자열 리터럴로 처리하려는 셸 메타 문자를 큰따옴표로 묶어 이스케이프해야 합니다. 예를 들어 foo 를 현재 쉘 변수의 값으로 대체 하는 sed 's/foo/$bar/'
문자열 리터럴로 대체합니다 (정의되지 않은 경우 아무것도 대체되지 않습니다. 참고: 변수의 일부 값은 sed 명령을 중단할 수 있습니다. 예를 들어 정의된 구분 기호가 , 이로 인해 sed 명령에서 구문 오류가 발생함 )$bar
sed "s/foo/$bar/"
$bar
$bar
$bar
bar='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/\'/\"/