Jawaban:
Saya bisa melakukannya dengan backslash:
25 % grep \< xmospos.c
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include <X11/Xlib.h>
Yang dikutip kurang dari, dan yang dikutip, backslashed kurang dari keduanya memberikan jawaban konyol.
grep -oP '(?< )(.*)$'
tidak bekerja dengan tanda kutip tunggal misalnya. Awalnya sudah dicoba.
(?<! )(.*)$
atau (?<= )(.*)$
?
Dua aturan sederhana:
\C
dari karakter berikutnya, apa pun itu, selain baris baru.'text'
lolos dari setiap karakter di antara mereka, termasuk garis miring terbalik, tetapi tidak termasuk kutipan tunggal (karena menandai akhir dari teks yang dikutip).Jadi:
grep -P '<html>' myfile
grep -P \<html\> myfile
grep -P '(?<!<)html' myfile
grep -P \(\?\<\!\<\) myfile
Jika Anda perlu memberikan argumen yang berisi tanda kutip tunggal, Anda dapat menggunakan '\''
untuk "melarikan diri" satu kutipan di dalam tanda kutip tunggal. Secara teknis, yang dilakukan adalah mengakhiri teks literal pertama, lalu meletakkan literal '
pada kata yang sama, kemudian lebih banyak teks literal masih dalam kata yang sama.
grep '^D'\''oh!' myfile
Sisa aturan penawaran (diringkas):
!"#$&'()*;<>?[\]^`{|}~
(dengan kata lain, karakter berikut aman: huruf, angka, %+,-./:=@_
dan karakter non-ASCII)."$\`
dan (dalam cangkang dengan riwayat diaktifkan) !
. Garis miring terbalik antara tanda kutip ganda akan muncul dalam string kecuali itu mendahului salah satu karakter non-literal.Aturan-aturan ini untuk bash dan kerang gaya Bourne lainnya (seperti abu dan ksh). Mereka juga berlaku untuk zsh (kecuali bahwa =
setelah spasi mungkin perlu mengutip). Aturan dalam csh / tcsh dan di Fish berbeda.