bash: поиск двойных кавычек не удался - PullRequest
1 голос
/ 17 февраля 2012

Я пытаюсь найти в stdin строку, которая выглядит следующим образом:

"\t", 7

Число '7' является переменной, поэтому я хочу сделать что-то вроде этого:

mumble | grep "\"\\t\", $number"

Греп ничего не возвращает. Я попытался разложить это на простейшие термины:

$ echo '"\t"'
"\t"

... как и ожидалось.

$ echo "\"\\t\""
"\t"

Рендеринг строки, которую я хочу, при интерполяции в двойных кавычках. Но ... * * 1013

$ echo '"\t"' | grep "\"\\t\""

ничего не возвращает.

Хорошо, давайте включим set -x, чтобы увидеть, что думает bash ...

$ echo '"\t"' | grep "\"\\t\""
+ grep '"\t"'
+ echo '"\t"'

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

Ответы [ 2 ]

2 голосов
/ 17 февраля 2012
echo ' asdfdf "\t",7 asdfadsf' | grep '"\\t",7'
1 голос
/ 17 февраля 2012

DoH!

'\' - это специальный символ в регулярном выражении ...

$ echo -n '"\t"' | grep "\"\\\\t\""
+ grep '"\\t"'
+ echo -n '"\t"'
"\t"

соответствует.

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