LINUX.ORG.RU

Не работает переменная в GREP

 


0

1

Пробую использовать в grep переменную, но не получается, то ли синтаксис неправильный то ли вообще невозможно. Подскажите пожалуйста…

#вот так работает
grep -E ‘constanta(:|;)’ all_txt.txt > 1.txt

#а вот так нет
domains_var=‘constanta(:|;)’
grep -E $domains_var all_txt.txt > 1.txt



Последнее исправление: alexross (всего исправлений: 1)

>$ cat /tmp/list
aaa
aaa;
aaa
aaa:
aaa
aaa
>$ grep -E 'aaa(;|:)' /tmp/list
aaa;
aaa:
>$ some_var='aaa(;|:)'
>$ grep -E $some_var /tmp/list
aaa;
aaa:

У меня все работает.

ubiquitine
()

Какой шелл? Что даёт echo $BASH_VERSION ?

Кстати, если используется переменная, то лучше заключать её в двойные кавычки, что бы избежать интерпретации значения переменной после её подстановки, то есть писать не $your_variable , а "$your_variable"

Xenius ★★★★★
()
Последнее исправление: Xenius (всего исправлений: 2)

Кавычки поставь вокруг имени переменной. Иначе получается такое: grep -E constanta(:|;) all_txt.txt > 1.txt — и скобки и пайп и даже точка с запятой интерпретируются шеллом. Надо: grep -E "$domains_var" all_txt.txt > 1.txt. И вообще заимей привычку всегда ставить кавычки вокруг переменных — хуже не будет.

CrX ★★★
()
Ответ на: комментарий от CrX

и скобки и пайп и даже точка с запятой интерпретируются шеллом

Это происходит до подстановки значений переменных:

$ a='|();'
$ echo $a
|();
xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Да, ты прав.

Но вообще на всякий случай лучше всегда брать в кавычки. Вдруг там пробелы окажутся (если переменная не прямо в скрипте задаётся, например, а из вывода какого-нибудь).

CrX ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.