2013-08-09 50 views
25

Tôi đang cố gắng sử dụng biến trong regex grep. Tôi sẽ chỉ đăng một ví dụ về sự thất bại và có lẽ ai đó có thể đề nghị làm thế nào để làm cho biến được đánh giá trong khi chạy lệnh grep. Tôi cũng đã thử ${var}.biến shell trong grep regex

$ string="test this" 
$ var="test" 
$ echo $string | grep '^$var' 
$ 

Vì regex của tôi phải khớp với các dòng bắt đầu bằng "test", nên in dòng lặp lại thông qua nó.

$ echo $string 
test this 
$ 
+3

Vâng, tôi nghĩ rằng tôi đã tìm ra nó hoạt động với dấu ngoặc kép. –

+1

Đúng, dấu ngoặc kép. Chỉ cần nhớ rằng trong dấu ngoặc kép bạn phải thoát khỏi dấu gạch chéo ngược và EOL '$'. – Kevin

+0

có thể trùng lặp của [Thêm lệnh grep vào bash script] (http://stackoverflow.com/questions/5142729/add-grep-command-to-bash-script) – tripleee

Trả lời

33

Bạn cần sử dụng dấu ngoặc kép. Dấu nháy đơn ngăn biến hệ vỏ bị xuyên suốt bởi vỏ. Bạn sử dụng dấu nháy đơn để ngăn trình bao làm nội suy mà bạn có thể phải làm nếu cụm từ thông dụng của bạn sử dụng $ như một phần của mẫu. Bạn cũng có thể sử dụng dấu gạch chéo ngược cho báo giá một $ nếu bạn đang sử dụng dấu ngoặc kép.

Ngoài ra, bạn có thể cần đặt biến của bạn trong dấu ngoặc nhọn ${var} để giúp tách biệt khỏi phần còn lại của mẫu.

Ví dụ:

$ string="test this" 
$ var="test" 
$ echo $string | grep "^$var" 
+0

Dấu ngoặc nhọn ở đâu trong mã ví dụ? – moejoe