2012-01-11 19 views
9

Tôi có một biểu thức chính quy với một backreference. Làm thế nào có thể sử dụng nó trong một kịch bản bash?Làm thế nào để sử dụng Backreference trong Bash

Chẳng hạn như tôi muốn in những gì phù hợp với (. *)

grep -E "CONSTRAINT \`(.*)\` FOREIGN KEY" temp.txt 

Nếu áp dụng nó vào

CONSTRAINT `fk_dm` FOREIGN KEY 

Tôi muốn đầu ra

fk_dm 

Trả lời

13
$ echo 'CONSTRAINT `helloworld` FOREIGN KEY' | grep -oP '(?<=CONSTRAINT `).*(?=` FOREIGN KEY)' 
helloworld 

-o, --only-matching  show only the part of a line matching PATTERN 
-P, --perl-regexp   PATTERN is a Perl regular expression 

(?=pattern) 
    is a positive look-ahead assertion 
(?!pattern) 
    is a negative look-ahead assertion 
(?<=pattern) 
    is a positive look-behind assertion 
(?<!pattern) 
    is a negative look-behind assertion 
+0

Bạn có thể xây dựng trên? <= Và? = – metdos

+0

Nếu tôi muốn in nhiều kết quả khớp, tôi có thể làm điều này không? – metdos

+0

Bạn nên sử dụng 'thay thế'. – kev

-2
grep -E 'CONSTRAINT \`(.*)\` FOREIGN KEY' temp.txt 
+1

Bạn lặp đi lặp lại một phần của câu hỏi của OP, chỉ thay đổi các dấu ngoặc kép mà không có hiệu lực trong trường hợp này. –

+0

Họ làm: OP hỏi "Làm thế nào có thể sử dụng nó trong một kịch bản bash?" và các dấu nháy đơn là câu trả lời. –

+0

Backticks được thoát trong bản gốc để chúng không được xem là thay thế lệnh. –

Các vấn đề liên quan