Kabuktaki bir parametrede <veya> nasıl kaçılır?


10

Karakteri grepiçeren bir PCRE ifadesi ile kullanmak istiyorum <. Bash yönlendirmek istediğimi düşünüyor, ama istemiyorum. Nasıl kaçabilirim <?

Yanıtlar:


11

Bunu ters eğik çizgi ile yapabildim:

25 % grep \< xmospos.c
#include        <stdio.h>
#include        <stdlib.h>
#include        <getopt.h>
#include        <X11/Xlib.h>

Birinden daha az alıntı yapılan ve bir alıntıdan daha az alıntı yapılan, her ikisinden daha az ters eğik çizgili aptalca cevaplar verdi.


5
Evet, ya da tek tırnak içine
glenn jackman

Hala öğrenmem gerekiyor, örneğin bunun tam olarak kaçma ile nasıl çalıştığı: grep -oP '(?< )(.*)$'örneğin tek tırnaklarla çalışmaz. İlk başta denedim.
hakre

@hakre Normal ifadenizde bir sözdizimi hatası var gibi görünüyor. Şunu mu demek istediniz (?<! )(.*)$yoksa (?<= )(.*)$?
Gilles 'SO- kötü olmayı bırak

4

İki basit kural:

  • Ters eğik çizgi \C, yeni satırdan başka bir sonraki karakterden kaçar.
  • Tek tırnak işaretleri 'text', ters eğik çizgi de dahil olmak üzere aralarındaki herhangi bir karakterden kaçar, ancak tek bir tırnak işareti içermez (alıntılanan metnin sonunu işaretlediğinden).

Böylece:

grep -P '<html>' myfile
grep -P \<html\> myfile
grep -P '(?<!<)html' myfile
grep -P \(\?\<\!\<\) myfile

Tek tırnak içeren bir argüman iletmeniz gerekiyorsa, '\''tek tırnak içinde tek bir tırnaktan “kaçmak” için kullanabilirsiniz . Teknik olarak, bunun yaptığı ilk değişmez metni sonlandırın, sonra 'aynı kelimeye bir değişmez , daha sonra aynı kelimede daha fazla değişmez metin koyun .

grep '^D'\''oh!' myfile

Alıntılama kurallarının geri kalanı (özetlenmiştir):

  • Aşağıdaki karakterleri en az birkaç kez alıntılamanız gerekir: boşluk ve !"#$&'()*;<>?[\]^`{|}~(diğer bir deyişle, aşağıdaki karakterler güvenlidir: harfler, rakamlar %+,-./:=@_ve ASCII olmayan karakterler).
  • Çift tırnak işaretleri arasında "$\`ve hariç tüm karakterler tam anlamıyla kullanılır (geçmiş etkinleştirilmiş kabuklarda) !. Değişmez olmayan karakterlerden önce gelmediği sürece dizede çift tırnak işaretleri arasında ters eğik çizgi görünür.

Bu kurallar bash ve diğer Bourne tarzı mermiler (kül ve ksh gibi) içindir. Zsh için de geçerlidirler (boşluktan =sonra tırnak işaretine ihtiyaç duyabilirler). Csh / tcsh ve Fish'teki kurallar farklıdır.

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.