-1

Я пытаюсь сопоставить строку:

* * * * * /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?

2 ответа2

2

можно избежать одинарных кавычек с опцией -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.
0

Извините, но вы не можете избежать одинарных кавычек внутри одинарных кавычек. Вам нужно будет использовать двойные кавычки. Вы можете доказать это себе, выполнив:

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

Ваша оболочка будет ожидать еще одну цитату.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .