@MIsternik

Регулярные выражения в grep с одинарными ковычками и двойными, в чем разница?

для примера использую файл со следующим содержимым:

\x47L
\x47L\x47L
\x47L\x47L\x47L
\x47L\x47L\x47L\x47L
\x47L\x47L\x47L\x47L\x47L
\x47L\x47L\x47L\x47L\x47L\x47L

необходимо найти строки где '\x47L' повторяется 3 и более раз.
grep -E '(\\x[a-zA-Z0-9]{3}){3,}' filename //работает
grep -E "(\\x[a-zA-Z0-9]{3}){3,}" filename //НЕ работает

grep -E '(\\x47L){3,}' filename //работает
grep -E "(\\x47L){3,}" filename //НЕ работает

Если в файл записать :
a
aa
aaa
aaaa
aaaaa

то работает и так:
"(a){3,}"
и так:
'(a){3,}'

wtf?
  • Вопрос задан
  • 2455 просмотров
Решения вопроса 1
@ldvldv
виноват bash, в случае двойных кавычек \\ заменяется на \
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@ShamblerR
будет работать так
"(a)\{3,\}"
А вот в случае если у вас внутри аргумента будет использоватсья " вам может это непонравится.
Так что фактически разница в том что они разные символы и если я исползую констркццию
"date='%Y' " то все работает правильно,
если же
'date='%Y' ' как вы понимаете кина не будет
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы