Làm thế nào để thoát <hoặc> trong một tham số trong shell?


10

Tôi muốn sử dụng grepvới biểu thức PCRE có chứa <ký tự. Bash nghĩ rằng tôi muốn chuyển hướng, nhưng tôi không muốn. Làm thế nào tôi có thể thoát <?

Câu trả lời:


11

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.


5
Có, hoặc đặt nó trong dấu ngoặc đơn
glenn jackman

Tôi vẫn cần phải tìm hiểu, ví dụ như cách chính xác hoạt động với thoát: 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.
hakre

@hakre Dường như có một lỗi cú pháp trong regrec của bạn. Ý của bạn là (?<! )(.*)$hay (?<= )(.*)$?
Gilles 'SO- ngừng trở nên xấu xa'

4

Hai quy tắc đơn giản:

  • Dấu gạch chéo ngược \Cthoát khỏi ký tự tiếp theo, bất kể đó là gì, ngoài dòng mới.
  • Các trích dẫn đơn '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):

  • Bạn cần trích dẫn các ký tự sau ít nhất một số lần: khoảng trắng và !"#$&'()*;<>?[\]^`{|}~(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).
  • Giữa các dấu ngoặc kép, tất cả các ký tự được sử dụng theo nghĩa đen ngoại trừ "$\`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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.