Sử dụng grep để tìm kiếm văn bản với trích dẫn duy nhất?


14

Tôi đang sử dụng trình soạn thảo văn bản gedit với thiết bị đầu cuối nhúng trong ubfox 12.04. Tôi đang cố gắng tìm kiếm một số văn bản bằng cách sử dụng grep. Tôi muốn tìm kiếm dòng mã này

'type' => 'select'

Tôi đã thử:

grep -r '\'type\' => \'select\''

Nhưng grepkhông trả lại bất kỳ kết quả.

Vì vậy, ai đó có thể vui lòng cho tôi biết làm thế nào để tìm kiếm mã ở trên?

Câu trả lời:


17

Bao quanh chuỗi tìm kiếm của bạn với dấu ngoặc kép:

grep "'type' => 'select'"

7

Bạn không thể thoát dấu ngoặc đơn xuất hiện trong dấu ngoặc đơn. Như đã giải thích trong [hướng dẫn bash] :( http://www.gnu.org/software/bash/manual/bashref.html#Single-Quotes ):

Đóng các ký tự trong dấu ngoặc đơn ('' ') sẽ giữ nguyên giá trị bằng chữ của mỗi ký tự trong dấu ngoặc kép. Một trích dẫn có thể không xảy ra giữa các trích dẫn đơn, ngay cả khi trước dấu gạch chéo ngược .

Vì vậy, bạn phải sử dụng các phương pháp khác nhau:

  1. Sử dụng dấu ngoặc kép:

    grep  "'type' => 'select'" file 
    
  2. Nếu bạn thích các giải pháp phức tạp không cần thiết:

    grep  "'"type"'"\ =\>\ "'"select"'" file 
    
  3. Bạn luôn có thể tìm kiếm bất kỳ ký tự đơn nào thay vì chỉ định các trích dẫn đơn:

    grep  '.type. => .select.' file 
    

Nhưng chỉ cần sử dụng ", nó làm cho mọi thứ đơn giản hơn nhiều.


Điều gì xảy ra nếu chuỗi tôi đang tìm kiếm nằm trong tệp php và chứa các biến? Tôi thực sự vật lộn với cái này.
Aubrey Robertson

@AubreyRobertson Tôi cần một ví dụ để trả lời đúng. Nếu bạn muốn tìm một cái gì đó giống như chuỗi $var, bạn có thể làm grep '$var' file.phptrong dấu ngoặc đơn. Để biết thêm chi tiết, xin vui lòng gửi một câu hỏi mới và để lại cho tôi một nhận xét ở đây. Tôi rất sẵn lòng giúp đỡ.
terdon

Tôi đã hiểu rồi. Đó không phải là các ký hiệu đô la đang làm phiền grep của tôi, đó là các tham chiếu mảng (dấu ngoặc vuông) vì grep sử dụng các ký hiệu cho regex. Đây là dòng tôi đã cố gắng grep: $output = $info['function']($variables); Tôi vừa phải thoát chúng đúng cách với dấu gạch chéo kép. Đây là lệnh grep của tôi sau khi tất cả đã nói và thực hiện:targetstring="\$output = \$info\\['function'\\](\$variables);" targetlinenumber=`grep -n "$targetfile" -e "$targetstring" | cut -d :f 1`
Aubrey Robertson

1

cd vào thư mục chứa tệp .txt của bạn

cd /path 

Sau đó :

bạn có thể dùng grep "'type' => 'select'" name.txt

hoặc là :

`grep "'type' => 'select'" /path/file.txt

Đầu ra:

nhập mô tả hình ảnh ở đây


3
Câu hỏi chỉ liên quan đến các trích dẫn duy nhất, không liên quan đến cấu trúc thư mục hoặc bất kỳ grepchức năng nào khác (hơi không liên quan).
Chris

@Chris, thực sự, với -rtùy chọn (như OP viết), tên tệp là không cần thiết.
Brady Trainor
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.