Yanıtlar:
Örnek sonuçta gösterildiği gibi ters eğik çizgiyi boşlukla değiştirebilirsiniz:
sed 's/\\/ /g'
veya kodunuzda gösterildiği gibi kaldırabilirsiniz:
sed 's/\\//g'
Özel anlamını iptal etmek için ters eğik çizgiden kaçmanın olası sorunları vardır. Ters eğik çizgi, hem kabukta hem de düzenli ifadelerde kaçmak için kullanılan özel bir karakterdir.
Kabuğun komut satırına veya komut dosyasına yazdığınız komut ilk olarak, karakterlerin özel anlamlarını ve bunların kaçışlarını yorumlayan kabuk tarafından işlenir. Sonuç daha sonra sed
, karakterlerin kendi yorumunu yapan yürütülecek (gibi ) komuta iletilir . Bir komut oluştururken zihinsel prosedür tam tersidir: önce normal ifade için kaçmayı ekleyin, sonra kabuk için kaçmayı ekleyin.
Bir regexdeki (gibi komutlara giriş sed
, grep
vs.) ters eğik çizgi böyle ters eğik çizgiden edilebilir: \\
ve ayrıca ayarlanan ifade kullanabilirsiniz [\]
orada ters eğik çizgi, özel anlamını yitirir çünkü eskisi gibi.
Bir kabukta (gibi bash
) ters eğik çizgi ile ters eğik çizgiden kaçabilirsiniz. Yani \
yazmak yerine \\
. Dizeyi çift tırnak işaretleri arasına almak "
ters eğik çizgi davranışını daha karmaşık hale getirir <1> ancak çift ters eğik çizgi yine de tek bir ters eğik çizgi oluşturur. Dizeyi tek tırnak işaretleri arasına almak '
, hariç tüm karakterlerin işlenmesini sağlar '
.
Kullanmak isterseniz çift tırnak :, aşağıdakilerden birini kullanabilirsiniz
sed "s/\\\\//g"
Escape - \
tarafından \
kabuğunda ve her kaçış \
tekrar regex. Aslında, bu durumda çift tırnak işareti gerekli değildir, çünkü her özel karakter düzgün bir şekilde kaçmıştır.
sed "s/[\\]//g"
- Kabuktan bir ters eğik çizgi \
ile kaçış ve regex'te bir set kullanın [
]
.
sed "s/[\]//g"
- Evet, örneğiniz POSIX uyumlu bir ortamda çalışmalıdır! Çift tırnaklar arasında, çift tırnak \
bağlamında özel bir karakterden önce $`"\
veya yeni satırdan önce kendini temsil eder . Durumunuzda kabuk veya sed
POSIX standardına uymuyor gibi görünüyor .
Tek tırnak işareti ile , dizeyi kullandığınız gibi veya daha kısa bir yolla da kullanabilirsiniz:
sed 's/[\]//g'
sed 's/\\//g'
Awk olarak, böyle yapardım,
$ echo 'NISHA =\455' | awk '{gsub(/\\/," ")}1'
NISHA = 455
sed 's/\\//'
Bir koyun \
önce \
size en özel karakterleri ile yaptığı gibi.
g
bilinmeyen bir nedenden dolayı bayrak. Bu komutun davranışını değiştirir, ancak soruda böyle bir değişiklik istenmedi. Aksi takdirde yanıtınız önceki yanıtlara kıyasla yeni bir şey getirmez.
sed
(veya muhtemelen bu komutu POSIX olmayan bir kabuktan mı çalıştırıyorsunuz?). Buna gerek yoksed
, gerçitr
yeterlidir:tr -d '\\' < P
.