2014-07-01 19 views
40

Önceden alıntılar tarafından çevrelenmiş bir sed ifadesinde tek bir alıntıdan nasıl kaçınılır? ÖrneğinSed'deki tek alıntıdan nasıl kaçınır?

:

sed 's/ones/two'\''s/' <<< 'ones thing'

two's thing 

3 dizeleri vardır:

sed 's/ones/one's/' <<< 'ones thing' 
+2

(http://stackoverflow.com/questions/1250079/escaping-single-quotes-within-single-quoted-strings) – buff

+0

kısa [Tek tırnak içindeki tek tırnak Kaçan] olası yinelenen Cevap "[bunu yapamazsınız] (http://www.gnu.org/software/bash/manual/bashref.html#Single-Quotes)" - tüm çalışmaların iyi sunulduğu çözümler. –

cevap

71

Alıntı sed kodları:

+6

evet, \ x27, '\' ' – 4pie0

+1

'dan daha üstündür Bu,' sed -i ', herhangi bir belirli nedenden dolayı işe yaramıyor gibi görünüyor. –

+0

@ T.Rex burada -i ile çalıştı – Kent

17

Bir hile bitişik dizeleri kabuk dize birleştirme kullanmak ve kabuk önceleniminin kullanarak gömülü alıntı kaçmak etmektir Kabuğun birlikte dikiş yaptığı sed ifadesinde:

bir başkası yardımcı

sed 's/ones/two'

\'

's/'

Umut! çift ​​tırnak ile

sed $'s/ones/two\'s/' <<< 'ones thing' 
5

iyi yolu $'some string with \' quotes \''

örneğin kullanmaktır

$ sed "s/ones/one's/"<<<"ones thing" 
    one's thing 
Ben ters eğik yüzlerce kodlarını kaçan

sevmiyorum - gözlerimi acıtıyor.

$ sed 's/ones/one\x27s/'<<<"ones thing" 
    one's thing 
+0

C stili '$' string'' Bash'a özgüdür, bu yüzden POSIX kabuğuna taşınabilir değildir. – tripleee

0

Bunun bir polis dışarı gibi ses geleceğini biliyorum ama dizede tek hem de çift tırnak oradayken ben sed çalışma almak asla: Genellikle bu şekilde yapmak. Benim gibi sorun yaşayan yeni haberlere yardım etmek için, bir seçenek dizgiyi ayırmaktır. 100'ün üzerinde index.hmtl dosyasında kod değiştirmek zorunda kaldım. Dizelerin hem tek hem de çift tırnakları vardı, bu yüzden dizeyi ayırdım ve ilk bloğu <!-- ve ikinci bloğu --> ile değiştirdim. Index.html dosyalarıma bulaştı ama işe yaradı.

1

Sadece sed komutunun dışındaki çift tırnak kullanın.

$ sed "s/ones/one's/" <<< 'ones thing' 
one's thing 

Dosyalarla da çalışır. Eğer dize içinde tek ve çift tırnak varsa

$ echo 'ones thing' > testfile 
$ sed -i "s/ones/one's/" testfile 
$ cat testfile 
one's thing 

, bu çok sorun değil. Sadece çift tırnaktan kaç.

Örneğin, bu dosya hem tek hem de çift tırnaklı bir dizgi içerir. Tek bir alıntı eklemek ve bazı çift tırnakları kaldırmak için sed kullanacağım.

$ 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 
İlgili konular