Искать строки в кавычках? - PullRequest
2 голосов
/ 22 марта 2012

У меня есть строка "$ server ['fish_stick']" (без учета двойных кавычек)

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

Я пробовал,

rgrep -i \$'server'\[\''fish'\_'stick'\'\] .

rgrep -i "\$server\[\'fish\_stick\'\]" .

rgrep -i '\$server\[\'fish\_stick\'\]' .

Это одиночные кавычки, которые вызывают мою проблему?Когда я отображаю первый вывод grep, он показывает именно то, что я хочу найти, но возвращает результаты мусора, как и все, что содержит $ server.

Пожалуйста, помогите и объясните, спасибо!

Ответы [ 2 ]

1 голос
/ 22 марта 2012

Основная проблема в том, что вы не цитируете аргумент, передаваемый grep.Единственное, что нужно экранировать, это \ $ (если в двойных кавычках) и [].Если вам нужна точная строка (без использования регулярных выражений), просто используйте fgrep (grep -F), который выполняет точное совпадение строк:

grep -F "\$server['fish_stick']"

Работает в моей системе:

$ foo="\$server['fish_stick']"
$ echo "$foo" | grep -F "\$server['fish_stick']"
$server['fish_stick']

Использованиерегулярное выражение:

$ echo "$foo" | grep "\$server\['fish_stick'\]"
$server['fish_stick']

Использование регулярного выражения и обработка вложенных одинарных кавычек:

$ echo "$foo" | grep '\$server\['\''fish_stick'\''\]'
$server['fish_stick']

Внутри одинарных кавычек нельзя избегать вложенных одинарных кавычек.Вы должны закрыть кавычки, а затем снова открыть их, чтобы «убежать» от одинарных кавычек.

http://mywiki.wooledge.org/Quotes

0 голосов
/ 23 марта 2012

Я не думаю, что вы спрашиваете, как получить эту строку в переменную без проблем с кавычками. Если вы, вот способ, используя здесь документ:

str=$(cat <<'END'
$foo['bar']
END
)

Чтобы решить вашу проблему с экранированием специальных символов для grep, вы можете использовать sed, чтобы поставить обратную косую черту перед любым не алфавитно-цифровым символом:

grep "$(sed 's/[^[:alnum:]]/\\&/g' <<< "$str")" ...

При использовании с set -x команда grep выглядит следующим образом: grep '\$foo\[\'\''bar\'\''\]' ...

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