이미 따옴표로 둘러싸인 sed 표현식에서 작은 따옴표를 이스케이프하는 방법은 무엇입니까?
예를 들면 :
sed 's/ones/one's/' <<< 'ones thing'
이미 따옴표로 둘러싸인 sed 표현식에서 작은 따옴표를 이스케이프하는 방법은 무엇입니까?
예를 들면 :
sed 's/ones/one's/' <<< 'ones thing'
답변:
견적 sed
따옴표와 코드를 :
$ sed "s/ones/one's/"<<<"ones thing"
one's thing
수백 개의 백 슬래시로 코드를 이스케이프하는 것을 좋아하지 않아 눈이 아파요. 일반적으로 나는 다음과 같은 방식으로 수행합니다.
$ sed 's/ones/one\x27s/'<<<"ones thing"
one's thing
sed -i
어떤 특별한 이유 에서 작동하지 않는 것 같습니다 .
한 가지 트릭은 인접한 문자열의 쉘 문자열 연결을 사용하고 쉘 이스케이프를 사용하여 포함 된 따옴표를 이스케이프하는 것입니다.
sed 's/ones/two'\''s/' <<< 'ones thing'
two's thing
sed 표현식에는 3 개의 문자열이 있으며 쉘이 함께 꿰맨 다 :
sed 's/ones/two'
\'
's/'
다른 사람에게 도움이되기를 바랍니다!
sed 's/ones/two''s/' <<< 'ones thing'
아니요, twos thing
. '
출력에서 누락되었습니다 . 이 답변에 설명 된 방식으로해야합니다.
sed 명령 외부에 큰 따옴표를 사용하십시오.
$ sed "s/ones/one's/" <<< 'ones thing'
one's thing
파일에서도 작동합니다.
$ echo 'ones thing' > testfile
$ sed -i "s/ones/one's/" testfile
$ cat testfile
one's thing
싱글 과 문자열 내부에 큰 따옴표를, 그것도 괜찮습니다. 큰 따옴표를 이스케이프하십시오.
예를 들어,이 파일에는 작은 따옴표와 큰 따옴표가 모두 포함 된 문자열이 있습니다. sed를 사용하여 작은 따옴표를 추가하고 일부 큰 따옴표를 제거합니다.
$ cat testfile
"it's more than ones thing"
$ sed -i "s/\"it's more than ones thing\"/it's more than one's thing/" testfile
$ cat testfile
it's more than one's thing
이것은 일종의 부조리하지만 내가 얻을 수 \'
있는 sed 's/ones/one\'s/'
작업에. Angular를 사용 import 'hammerjs';
하여 src/main.ts
파일에 자동으로 추가되는 쉘 스크립트를 만들기 위해 이것을 찾고있었습니다 .
내가 일하게 된 것은 다음과 같습니다.
apost=\'
sed -i '' '/environments/a\
import '$apost'hammerjs'$apost';' src/main.ts
따라서 위의 예에서는 다음과 같습니다.
apost=\'
sed 's/ones/one'$apost's/'
왜 \'
저절로 작동하지 않는지 모르겠지만 거기에 있습니다.
나는 이것이 경찰처럼 들릴 것이라는 것을 알고 있지만 문자열에 작은 따옴표와 큰 따옴표가 모두있을 때 sed를 사용할 수 없습니다. 나처럼 문제가있는 초보자를 돕기 위해 한 가지 옵션은 문자열을 분할하는 것입니다. 100 개 이상의 index.hmtl 파일에서 코드를 교체해야했습니다. 문자열에는 작은 따옴표와 큰 따옴표가 모두 있으므로 문자열을 분할하고 첫 번째 블록을
<!--
로, 두 번째 블록을 -->
. 그것은 내 index.html 파일을 엉망으로 만들었지 만 작동했습니다.