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



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



grep -r "0.49" *


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

531   8  

8 ответов:

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

grep -F -r '0.49' * обрабатывает 0.49 как "фиксированную" строку вместо регулярного выражения. Это делает . теряют свой особый смысл.

вам нужно бежать . Как "0\.49".

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

просто избежать .

grep -r "0\.49"

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

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

Escape dot. Пример команды будет.

grep '0\.00'

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

grep -r "0[.]49"

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

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

$ grep -r 0\.49 *

и:

$ grep -r 0[.]49 *

я использую" нормальную " оболочку bash на Ubuntu и Archlinux.

Comments

    Ничего не найдено.