[sed] sed에서 작은 따옴표를 이스케이프하는 방법은 무엇입니까?

이미 따옴표로 둘러싸인 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 's/ones/two'\''s/' <<< 'ones thing'

two's thing

sed 표현식에는 3 개의 문자열이 있으며 쉘이 함께 꿰맨 다 :

sed 's/ones/two'

\'

's/'

다른 사람에게 도움이되기를 바랍니다!


답변

가장 좋은 방법은 $'some string with \' quotes \''

예 :

sed $'s/ones/two\'s/' <<< 'ones 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 파일을 엉망으로 만들었지 만 작동했습니다.


답변

AppleMacOSX 터미널의 일부 이스케이프가 실패하므로 다음과 같이됩니다.

sed 's|ones|one'$(echo -e "\x27")'s|1' <<<'ones thing'