2012-02-09 23 views
16

ile değiştirin SED:bulmak ve bu komutu kullanmaya çalışıyorum küme parantezleri

sed -i 's#\{test1\}#test2#' /example/myfile.txt 

test2 ile {test1} örneklerini değiştirin. Doğru küme parantezi kaçan değil

sed: -e expression #1, char 17: Invalid preceding regular expression 

Am:

hatası alıyorum?

+1

Hmm .. Geri eğik çizgileri çıkardım ve iyi çalışıyor gibi görünüyor. – atdev

cevap

22
sed -i 's#{test1}#test2#' /example/myfile.txt 

Sen hiç küme parantezi kaçan değil {}

21

kaçmak gerekmez. sed'da, varsayılan normal ifadeler BRE'lerdir, burada \{ ve \} bir aralık ifadesini belirtir. test1 bir aralık olmadığı için BRE’niz yanlış.

Eğer ters eğik çizgi bırakın ya bunu düzeltmek (parantez Bres özellik arz etmeyen) ya da bunu aynı tutmak ve Eres kullanmak sed için (sed GNU -r bayrak, BSD ile -E bayrak/MacOSX sed).

+0

TIL BRE ERE. BRE'ler, "sed" dünyasında oldukça kullanışlıdır. – ericsoco

İlgili konular