Я пытаюсь найти строку 0.49
(с точкой) с помощью команды
grep -r "0.49" *
Но происходит то, что я также получаю нежелательные результаты, которые содержат строку, такую как 0449
, и 0949
т. Д. Дело в том, что Linux рассматривает точку (.) Как любой символ и выдает все результаты. Но я хочу получить результат только за «0,49».
\\.
это сработало. Я использую Zsh.\\.
для bash или использовать"\."
для выхода из оболочки.grep -F -r '0.49' *
обрабатывает 0.49 как «фиксированную» строку вместо регулярного выражения. Это заставляет.
терять свое особое значение.источник
Вам нужно сбежать
.
как"0\.49"
.A
.
- это метасимвол регулярного выражения, соответствующий любому символу (кроме новой строки). Чтобы соответствовать буквальному периоду, вам нужно избежать его.источник
Просто сбежать
.
grep -r "0\.49"
источник
Вы также можете использовать «[.]»
источник
Здесь так много ответов, предлагающих уйти от точки,
\.
но я снова и снова сталкиваюсь с этой проблемой:\.
дает мне тот же результат, что и.
Тем не менее, эти два выражения работают для меня:
И:
Я использую "нормальную" оболочку bash в Ubuntu и Archlinux.
Редактировать или, согласно комментариям:
Обратите внимание, одинарные кавычки делают разницу здесь.
источник
grep '\.'
илиgrep \\.
(я бы настоятельно рекомендовал первый вариант. Двойные кавычки тоже работают, как и в первоначальном вопросе; но одинарные кавычки легче понять и использовать. Например, в двойных кавычках вам все равно придется удваивать обратную косую черту в некоторых сценариях ).Побег точка. Пример команды будет.
источник
Вы можете экранировать точку и другие специальные символы, используя \
например. grep -r "0 \ .49"
источник
\.
окружение кавычками необходимо, чтобы оно заработало.Вы также можете искать с параметром -, который в основном игнорирует все специальные символы и не будет интерпретироваться grep.
источник