문제

표현식이 작은따옴표로 묶인 경우 sed에서 작은따옴표를 일치시키는 방법:

sed -e '...'

예를 들어 다음 텍스트와 일치해야 합니다.

'foo'
도움이 되었습니까?

해결책

다음 중 하나를 사용할 수 있습니다.

"texta'textb" (APOSTROPHE inside QUOTATION MARKs)

또는

'texta'\''textb' (APOSTROPHE text APOSTROPHE, then REVERSE SOLIDUS, APOSTROPHE, then APOSTROPHE more text APOSTROPHE)

유니코드 문자 이름을 사용했습니다.REVERSE SOLIDUS는 일반적으로 백슬래시로 알려져 있습니다.

후자의 경우에는 아포스트로피를 닫고 백슬래시를 사용하여 아포스트로피를 따옴표로 묶은 다음 나머지 텍스트에 대해 또 다른 아포스트로피를 엽니다.

다른 팁

질문에 대한 설명에서 언급했듯이 실제로는 sed에 관한 것이 아니라 셸의 인용 문자열에 인용을 포함하는 방법(예:세게 때리다).

이전 답변을 명확히 하려면 백슬래시를 사용하여 따옴표를 이스케이프 처리해야 하지만 작은 따옴표로 묶인 표현식 내에서는 이를 수행할 수 없습니다.Bash 매뉴얼 페이지에서:

단일 따옴표로 문자를 둘러싸는 것은 인용문 내에서 각 문자의 문자 값을 보존합니다.백 슬래시가 앞서도 단일 따옴표 사이에 단일 견적이 발생할 수 없습니다.

따라서 인용된 표현식을 종료하고 이스케이프된 인용문을 삽입한 후 새 인용된 표현식을 시작해야 합니다.쉘의 따옴표 제거는 추가 공백을 추가하지 않으므로 실제로 문자열 연결이 발생합니다.

따라서 'foo'라는 표현을 작은따옴표로 묶는 방법에 대한 원래 질문에 답하려면 다음과 같이 하면 됩니다.

sed -e '...'\''foo'\''...'

(여기서 '...'는 sed 표현식의 나머지 부분입니다).

전반적으로 가독성을 위해 가능하면 주변 따옴표를 큰따옴표로 변경하는 것이 훨씬 더 좋습니다.

sed -e "...'foo'..."

[첫 번째(작은 따옴표) 접근 방식의 잠재적인 유지 관리 악몽의 예로서 StackOverflow의 구문 강조 표시가 따옴표, 백슬래시 및 기타 텍스트의 색상을 어떻게 지정하는지 참고하세요. 이는 확실히 올바르지 않습니다.]

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top