Использование grep для поиска строки с точкой в ​​ней

Я пытаюсь найти строку 0.49 (с точкой) с помощью команды

grep -r "0.49" *

Но что происходит, я также получаю нежелательные результаты, содержащие строку типа 0449, 0949 и т.д. Дело в том, что linux рассматривает точку (.) Как любой символ и выводит все результаты. Но я хочу получить результат только для "0,49".

Ответ 1

grep использует регулярные выражения; . означает "любой символ" в регулярном выражении. Если вы хотите литеральную строку, используйте grep -F, fgrep или экранируйте . в \..

Не забудьте обернуть строку в двойные кавычки. Или же вы должны использовать \\.

Итак, ваша команда должна быть:

grep -r "0\.49" *

или

grep -r 0\\.49 *

или

grep -Fr 0.49 *

Ответ 2

grep -F -r '0.49' * обрабатывает 0,49 как "фиксированную" строку вместо регулярного выражения. Это заставляет . потерять свое особое значение.

Ответ 3

Вам нужно избежать . как "0\.49".

A . - метасимвол регулярного выражения для соответствия любому символу (кроме новой строки). Чтобы соответствовать буквальному периоду, вам нужно избежать этого.

Ответ 4

Просто выйдите из .

grep -r "0\.49"

Ответ 5

Вы также можете использовать "[.]"

grep -r "0[.]49"

Ответ 6

Вы можете избежать точки и других специальных символов, используя \

например. grep -r "0 \.49"

Ответ 7

Побег точка. Пример команды будет.

grep '0\.00'

Ответ 8

Здесь так много ответов, предлагающих избежать точки с \., но я снова и снова сталкиваюсь с этой проблемой: \. дает мне тот же результат, что и .

Однако эти два выражения работают для меня:

$ grep -r 0\\.49 *

А:

$ grep -r 0[.]49 *

Я использую "обычную" оболочку bash в Ubuntu и Archlinux.