grep: Sondaki ters eğik çizgi


23

Bunun için bir grep yapmak istiyorum \resources\. Bunu nasıl yaparım?

Denedim:

grep \resources\
grep \\resources\\
grep "\resources\"
grep "\\resources\\"

Bunların hiçbiri .


5
Ters eğik çizgilerin bash yorumunu önlemek için çift tırnak yerine tek tırnak kullanın. grep '\\resources\\'
Paul Tomblin

Yanıtlar:


27

Ters eğik çizgi birçok uygulama için özel bir karakterdir:

  • kabuk dahil: mümkünse tek tırnak kullanarak başka bir ters eğik çizgi kullanarak veya daha zarif bir şekilde kaçmanız gerekir :

    $ printf '%s\n' foo\\bar 'foo\bar'
    foo\bar
    foo\bar
    

    Burada komut foo\bar, terminalde olduğu gibi yankılanan iki argüman aldı .

    (Yukarıda, birçok uygulama printfyerine ters eğik çizgi yorumunu da yaptım (burada bir geri alma karakterine genişleyecektim ) kullandım).echoecho\b

  • Fakat ters eğik çizgi de özel bir karakterdir grep. Bu komut gibi birçok özel dizileri tanır \(, \|, \., vb. Benzer şekilde \\, gerçek bir ters eğik çizgi karakteri için çift ​​ile grep beslemeniz gerekir . Bu, kabuk kullanmanızın gerektiği anlamına gelir:

    grep 'foo\\bar'
    

    Veya eşdeğer olarak:

    grep foo\\\\bar
    

    (Her iki satır da kabuğa foo\\barargüman olarak iletmesini söyler grep).

  • Diğer birçok komut argümanlarında ters eğik çizgileri yorumlar ... ve iki kaçış seviyesine ihtiyaç vardır (biri kabuk yorumundan, biri komut yorumundan kaçmak için).


Bu arada, kabuk için, tek tırnak '…'karakteri yorumlama her türlü engellemeye, ancak çift tırnak sadece bazıları önler: özellikle $, `ve \içinde aktif karakterleri kalır "…".


18

Ayrıca kullanabilirsiniz fgrep(sadece hangi grepile -Fbayrak). Bu, deseni sabit bir dize olarak yorumlamaya zorlar (yani \değişmez olarak davranır \). Yine de ters eğik çizgileri kabuk tarafından genişlemekten korumanız gerekecektir.

grep -F '\resources\'

Bayrak bir nedeni var! Grep yapmaya çalışıyordum ..\ve hatta '..\\'istediğim sonuçları alamadım. grep -F '..\'bana istediğimi aldım! Teşekkürler
FreeSoftwareServers

.. Bu yorumu doğru şekilde biçimlendirmeyi deneyin! -> meta.stackexchange.com/questions/201663//
FreeSoftwareServers

3

grepbir ters eğik çizgiyi temsil etmek için dört ters eğik çizgi gerektirir :

grep "\\\\resources\\\\"

12
Bu oldukça yanıltıcı bir basitleştirmedir. grepsadece başka bir ters eğik çizgiden kaçmak için 1 ters eğik çizgi gerektirir, ancak kabuk da ters eğik çizgilerin alıntılanmasını gerektirir. Çift tırnak ( "), ters eğik çizgi önermez, ancak ters eğik çizgi yapar, bu nedenle örneğinizdeki çift tırnak hiçbir şey yapmaz ve bunun yerine 4 ters eğik çizgi gerekir.
jw013

Windows komut istemi * nix gibi ters eğik çizgileri işlemese bile, Windows'ta dört ters eğik çizgi kullanmak zorunda kaldım. GnuWin portlarının kabuğun etkisini yanlış anlayıp anlamadığını ve 4 kesikli bir gereksinimi zorla kodlayıp kodlamadığını merak ediyorum grep.
Synetech
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.