Команда Grep отменяется специальным символом? - PullRequest
3 голосов
/ 04 октября 2011

Я пытаюсь написать bash-скрипт, который будет искать в текстовом файле строку из другого текстового файла, который хранится в переменной. Однако в строке есть несколько специальных символов, и по какой-то причине она, похоже, портит команду grep. Строка следующая: Sometxt ^ / someurl /? $ http://somewebsite.com/

команда grep, которую я использую:

grep -v "$string" file.txt >> new_file.txt

Похоже, это не работает, и если я повторю текущую команду grep, используя:

echo "grep -v \"$string\" file.txt >> new_file.txt"

Я получаю вывод, который перепутан.

Если я введу руководство по команде grep и введу фактическую строку, она будет работать нормально, поэтому я предполагаю, что моя оболочка пытается расширить специальные символы, но я не знаю, как экранировать их все в строке. *

У кого-нибудь есть идеи?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 04 октября 2011

попробуйте fgrep (или grep -F)

По умолчанию grep интерпретирует шаблон поиска как основное регулярное выражение, придавая особое значение таким символам, как ., $, ^ [] и т. Д.

1 голос
/ 04 октября 2011

Не проверено, но это может помочь

grep -v "$(printf "%q" "$string")" file.txt >> new_file.txt

Встроенный форматер bash printf %q экранирует оболочку специальные символы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...