Tại sao thoát trích dẫn duy nhất không hoạt động trong grep?


0

Tôi đang cố gắng để khớp một chuỗi:

* * * * * /usr/local/bin/growlnotify -t 'helloTitle' -m 'helloMessage' -n 'myApp' -sw

với:

crontab -l | grep '^[^#].*/usr/local/bin/growlnotify.*\-n \'myApp\'.*$'

nó không hoạt động: không có gì phù hợp.

Nhưng:

crontab -l | grep '^[^#].*/usr/local/bin/growlnotify.*\-n.*$'

hoạt động rất tốt:

* * * * * /usr/local/bin/growlnotify -t 'helloTitle' -m 'helloMessage' -n 'myApp' -sw

Vấn đề là \'myApp\'gì?

Làm thế nào để thoát khỏi một trích dẫn trong grep / sed?


-1 bạn thực sự nên sử dụng một ví dụ đơn giản hơn để chứng minh quan điểm của mình
barlop

Câu trả lời:


3

người ta có thể thoát trích dẫn đơn với -etùy chọn và sử dụng biểu diễn thập lục phân :

echo -e '\047'
> '

hoặc trong grep bằng cách sử dụng tùy chọn và biểu diễn thập lục phân-P :

crontab -l | grep -P '^.*/usr/local/bin/growlnotify.*\-n \047myApp\047.*$'
> * * * * * /usr/local/bin/growlnotify -t 'helloTitle' -m 'helloMessage' -n 'myApp' -sw

ss64 làm tài liệu tham khảo:

-P
   --perl-regexp
       Interpret PATTERN as a Perl regular expression.

Nếu bạn đang sử dụng GNU grep, bạn cũng có thể thay thế các dấu ngoặc đơn 'kèm theo biểu thức bằng dấu ngoặc kép "(2 ký tự sửa đổi) và xóa dấu gạch chéo ngược \(loại bỏ 3 ký tự). Sao chép / dán bằng chứngecho "* * * * * /usr/local/bin/growlnotify -t 'helloTitle' -m 'helloMessage' -n 'myApp' -sw" | grep "^[^#].*/usr/local/bin/growlnotify.*-n 'myApp'.*$"
adam

0

Xin lỗi để nói, nhưng bạn không thể thoát dấu ngoặc đơn trong dấu ngoặc đơn. Bạn sẽ cần phải sử dụng dấu ngoặc kép. Bạn có thể chứng minh điều đó với chính mình bằng cách thực hiện:

echo '\'' <-- doesn't work

Vỏ của bạn sẽ mong đợi một báo giá khác.


2
Để làm rõ: "\" không thể được sử dụng để thoát bất cứ điều gì trong dấu ngoặc đơn. Đây không phải là một vấn đề grep / sed; đây là một vấn đề về vỏ (bash, csh, vân vân).
Scott
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.