我正在尝试匹配一个字符串:
* * * * * /usr/local/bin/growlnotify -t 'helloTitle' -m 'helloMessage' -n 'myApp' -sw
和:
crontab -l | grep '^[^#].*/usr/local/bin/growlnotify.*\-n \'myApp\'.*$'
它不起作用:没有匹配项。
但:
crontab -l | grep '^[^#].*/usr/local/bin/growlnotify.*\-n.*$'
效果很好:
* * * * * /usr/local/bin/growlnotify -t 'helloTitle' -m 'helloMessage' -n 'myApp' -sw
有什么问题\'myApp\'
?
如何在 grep/sed 中转义单引号?
答案1
可以使用-e
选项并使用来转义单引号十六进制表示:
echo -e '\047'
> '
或者在 grep 中使用十六进制代表和-P
选择:
crontab -l | grep -P '^.*/usr/local/bin/growlnotify.*\-n \047myApp\047.*$'
> * * * * * /usr/local/bin/growlnotify -t 'helloTitle' -m 'helloMessage' -n 'myApp' -sw
SS64作为参考:
-P
--perl-regexp
Interpret PATTERN as a Perl regular expression.
答案2
很抱歉,但您无法在单引号内转义单引号。您需要使用双引号。您可以通过以下方式亲自证明这一点:
echo '\'' <-- doesn't work
你的 shell 将会期待另一个引号。