Чому увімкнена одиночна цитата не працює в grep?


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


- Ви дійсно повинні використати простіший приклад, щоб продемонструвати свою точку зору
barlop

Відповіді:


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.

Якщо ви використовуєте GNU grep, ви могли б також замінити одинарні лапки ' укладаючи вираз подвійними лапками " (Змінено 2 символи) і видалення зворотних косових рисок \ (Видалено 3 символи). Копіювати / вставляти доказ echo "* * * * * /usr/local/bin/growlnotify -t 'helloTitle' -m 'helloMessage' -n 'myApp' -sw" | grep "^[^#].*/usr/local/bin/growlnotify.*-n 'myApp'.*$"
adam

0

Вибачте, але ви не можете уникнути одиничних лапок у окремих лапках. Вам потрібно буде використовувати подвійні лапки. Ви можете це довести собі:

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

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


2
Щоб пояснити: "" не можна використовувати для виходу нічого всередині окремих лапок. Це не grep / sed випуск; це проблема оболонки (bash, csh і т.д.).
Scott
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.