Câu trả lời:
Tôi đã có thể làm điều đó với dấu gạch chéo ngược:
25 % grep \< xmospos.c
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include <X11/Xlib.h>
Một trích dẫn ít hơn, và một trích dẫn, gạch chéo ít hơn cả hai đưa ra câu trả lời ngớ ngẩn.
grep -oP '(?< )(.*)$'
không hoạt động với các trích dẫn đơn lẻ chẳng hạn. Đã thử nó lúc đầu.
(?<! )(.*)$
hay (?<= )(.*)$
?
Hai quy tắc đơn giản:
\C
thoát khỏi ký tự tiếp theo, bất kể đó là gì, ngoài dòng mới.'text'
thoát khỏi bất kỳ ký tự nào giữa chúng, bao gồm dấu gạch chéo ngược, nhưng không bao gồm một trích dẫn (vì nó đánh dấu sự kết thúc của văn bản được trích dẫn).Như vậy:
grep -P '<html>' myfile
grep -P \<html\> myfile
grep -P '(?<!<)html' myfile
grep -P \(\?\<\!\<\) myfile
Nếu bạn cần vượt qua một đối số có chứa các trích dẫn đơn, bạn có thể sử dụng '\''
để Thoát thoát ra một trích dẫn trong một dấu ngoặc đơn. Về mặt kỹ thuật, những gì nó làm là kết thúc văn bản chữ đầu tiên, sau đó đặt một chữ '
trong cùng một từ, sau đó văn bản nhiều chữ hơn vẫn trong cùng một từ.
grep '^D'\''oh!' myfile
Phần còn lại của các quy tắc trích dẫn (tóm tắt):
!"#$&'()*;<>?[\]^`{|}~
(nói cách khác, các ký tự sau là an toàn: chữ cái, chữ số %+,-./:=@_
và ký tự không phải ASCII)."$\`
và (trong trình bao có bật lịch sử) !
. Dấu gạch chéo ngược giữa dấu ngoặc kép sẽ xuất hiện trong chuỗi trừ khi nó đứng trước một trong các ký tự không theo nghĩa đen.Các quy tắc này dành cho bash và các vỏ kiểu Bourne khác (như tro và ksh). Chúng cũng áp dụng cho zsh (ngoại trừ =
sau khoảng trắng có thể cần trích dẫn). Các quy tắc trong csh / tcsh và trong Cá là khác nhau.