Sed манипулирует линиями crontab - PullRequest
1 голос
/ 20 января 2012

Я хотел бы использовать sed, чтобы удалить строку из моего файла crontab. Сначала я сохраняю пользовательский crontab в файле text.txt. Тогда я хотел бы удалить эту строку:

*/5 * * * * svn update /root/tamainut/schedule/generico.sh && sh /root/tamainut/schedule/generico.sh

Я думаю, что проблема с персонажами, но я потерялся. Я попробовал:

sed '*/5 * * * * svn update \/root\/tamainut\/schedule\/generico.sh && sh \/root\/tamainut\/schedule\/generico.sh/d' text.txt
sed: -e expresión #1, carácter 1: unknown command: `*'

Я пытался:

sed '\*/5 \* \* \* \* svn update \/root\/tamainut\/schedule\/generico.sh && sh \/root\/tamainut\/schedule\/generico.sh/d' text.txt 
sed: -e expresión #1, carácter 115: unterminated address regex

Где я иду не так?

Ответы [ 3 ]

3 голосов
/ 20 января 2012

* означает " повторяется в любое время " в sed => использовать \:

sed '/\*\/5 \* \* \* \* svn update \/root\/tamainut\/schedule\/generico.sh && sh \/root\/tamainut\/schedule\/generico.sh/d' text.txt

Вы также можете заменить все * и /на . (это менее надежно, но более удобно писать: это то, что я часто делаю):

sed '/..5 . . . . svn update .root.tamainut.schedule.generico.sh && sh .root.tamainut.schedule.generico.sh/d' text.txt
1 голос
/ 20 января 2012

Если вы можете ограничить строку поиска, она очистит код sed. Если вам необходимо сопоставить всю строку, используйте другой разделитель в диапазоне адресов:

$ sed '\|^\*/5 \* \* \* \* svn update /root/tamainut/schedule/generico.sh && sh /root/xxxx/file.sh$|d'

Это позволяет избежать экранирования символов '/'.

1 голос
/ 20 января 2012

Вы можете использовать:

sed '/\*\/5 \* \* \* \* svn update \/root\/tamainut\/schedule\/generico.sh && sh \/root\/tamainut\/schedule\/generico.sh/d' text.txt

Но я бы выбрал одно ключевое слово или пару ключевых слов, которые делают строку уникальной, и использовал бы их:

sed '/generico.sh.*generico.sh/d' text.txt

Вашоригинал столкнулся с проблемами без открытия / для запуска регулярного выражения, а символы * являются метасимволами, поэтому их тоже нужно экранировать.

...