Я пытаюсь найти строку 0.49
(с точкой) с помощью команды
grep -r "0.49" *
Но что происходит, я также получаю нежелательные результаты, содержащие строку типа 0449
, 0949
и т.д. Дело в том, что linux рассматривает точку (.) Как любой символ и выводит все результаты. Но я хочу получить результат только для “0,49”.
grep
использует регулярные выражения; .
означает “любой символ” в регулярном выражении. Если вы хотите литеральную строку, используйте grep -F
, fgrep
или экранируйте .
в \.
.
Не забудьте обернуть строку в двойные кавычки. Или же вы должны использовать \\.
Итак, ваша команда должна быть:
grep -r "0\.49" *
или
grep -r 0\\.49 *
или
grep -Fr 0.49 *
grep -F -r '0.49' *
обрабатывает 0,49 как “фиксированную” строку вместо регулярного выражения. Это заставляет .
потерять свое особое значение.
Вам нужно избежать .
как "0\.49"
.
A .
– метасимвол регулярного выражения для соответствия любому символу (кроме новой строки). Чтобы соответствовать буквальному периоду, вам нужно избежать этого.
Просто выйдите из .
grep -r "0\.49"
Вы также можете использовать “[.]”
grep -r "0[.]49"
Вы можете избежать точки и других специальных символов, используя \
например. grep -r “0 \.49”
Побег точка. Пример команды будет.
grep '0\.00'
Здесь так много ответов, предлагающих избежать точки с \.
, но я снова и снова сталкиваюсь с этой проблемой: \.
дает мне тот же результат, что и .
Однако эти два выражения работают для меня:
$ grep -r 0\\.49 *
А:
$ grep -r 0[.]49 *
Я использую “обычную” оболочку bash в Ubuntu и Archlinux.