Bash: экранирование символов в кавычках - PullRequest
1 голос
/ 13 августа 2010

Я пытаюсь экранировать символы внутри обратных галочек в моей команде bash, в основном для обработки пробелов в именах файлов, которые приводят к сбою моей команды.

Пока у меня есть команда:

grep -Li badword `grep -lr goodword *`

Эта команда должна привести к списку файлов, которые не содержат слово «badword», но содержат «goodword».

Ответы [ 2 ]

3 голосов
/ 13 августа 2010

Ваш подход, даже если вы получите право на экранирование, столкнется с проблемами, когда число файлов, выводимых goodword grep, достигнет пределов длины командной строки.Лучше перенаправить вывод первого grep на второй grep, например,

grep -lr -- goodword * | xargs grep -Li -- badword

Это будет правильно обрабатывать файлы с пробелами в них, но произойдет сбой, если имя файла имеетновая строка в нем.По крайней мере, GNU grep и xargs поддерживают разделение имен файлов байтами NUL, например:

grep -lrZ -- goodword * | xargs -0 grep -Li -- badword

EDIT: добавлены двойные тире -- к grep, чтобы избежать случая, когда какой-либо файлимена начинаются с - и будут интерпретироваться grep как дополнительные параметры.

1 голос
/ 13 августа 2010

Как насчет переписать его на:

grep -lr goodword * | grep -Li badword
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...