2016-04-11 22 views
3

çıkış aynıdır linux: '' kabuk komut öngörülemeyen çıkış vererek tek tırnak içinde ters eğik çizgi izleyen iki komutlar için

echo 'my\name' | grep 'my\\name' 
my\name 

ve ayrıca bir sonraki komutu için çıkış da aynıdır

,

echo 'my\name' | grep 'my\\\name' 
my\name 

Neden herkes aynı çıktıda neden sonuçlandığını anlatabilir mi ?? Neden fazladan bir ters eğik çizgi de çıkışta herhangi bir değişikliği etkilemiyor?

biz grep içinde dörde ters eğik çizgi sayısını artırmak ancak, daha sonra çıkış uzağa gider,

echo 'my\name' | grep 'my\\\\name' 

hiçbir çıkış

Pls tek ve çift grep ve Tersbölünün davranışı ile bana yol tırnak.

+1

superuser.com bunu sormak için doğru yer olurdu .... – tod

+1

@tod veya [unix.se]? –

+1

grep, regex'leri kabul eder, ters cevapların bir cevap için normal ifadelerde nasıl davrandığına bakın (belki bu, http: //stackoverflow.com/questions/4025482/cant-escape-the-backslash-with-regex). Eğer tam bir eşleşme istiyorsanız 'grep -F' – 123

cevap

2

İlk 2 örnekte eşleşen ifadenizdeki \\, girişte tek bir \ eşleşmesiyle eşleşiyor. İkinci bir örnekte fazladan bir \, n'dan kaçıyor ve girişte n eşleşiyor.

Bu örneklerle açık olacaktır:

echo 'myname' | grep 'my\name' 
myname 

echo 'myname' | grep 'myna\me' 
myname 

echo 'myname' | grep 'm\yn\am\e' 
myname 

echo 'my\name' | grep 'my\name' 

echo 'my\name' | grep 'my\\name' 
my\name 

echo 'my\name' | grep 'my\\\name' 
my\name 

echo 'my\name' | grep 'my\\\nam\e' 
my\name 
+0

kullanın, tek tırnak yerine regex desenine çift tırnak eklersek davranış nasıl değişebilirdi? –

+1

Çift tırnak işareti içinde \ \ olarak girilir; böylece şunları kullanmalısınız: echo '\ name' | ggrep "benim adım" benim \ adı ' – anubhava

+0

efendim yankı ifadesinin çift tırnaklarında ters eğikliğin doğası nedir. ur yorumdan anladım ki grep ile kullanılan bir çift ters eğik çizgi çift tırnak içinde tekil olarak ele alınır, ancak ben çift tırnaklar varsa boru lhs hakkında ne zaman davranış açıklar? –

İlgili konular