Шаблон, который вы передаете grep
, не соответствует вашим требованиям. Fire
просто означает эти буквы в указанном порядке в любом месте строки.
Вы включаете параметр -w
, который ограничивает его появление в виде отдельного слова, но он все еще может находиться в любом месте строки. С man grep
в моей системе:
-w, --word-regexp
Выберите только те строки, которые содержат совпадения, которые образуют целые слова. Тест состоит в том, что соответствующая подстрока должна быть либо в начале строки, либо предшествовать не состоящему из слова символу. Точно так же он должен быть либо в конце строки, либо следовать за символом, не входящим в состав слова. Составляющие слова символы - это буквы, цифры и знак подчеркивания.
Обычно каждая строка либо повторяется в выводе, либо скрывается, но вы включаете опцию -o
. С man grep
в моей системе:
-o, --only-match
Печатайте только совпадающие (непустые) части совпадающей строки, каждая из которых находится на отдельной выходной строке.
Обратите внимание, в частности, на последнее предложение: если совпадают несколько частей строки, они все будут выводиться как отдельные строки вывода .
Сравните:
# Match all three words, and output the line if it matches
$ echo 'one two three' | grep -E 'one|two|three'
one two three
# Match all three words, and output the matching parts
$ echo 'one two three' | grep -Eo 'one|two|three'
one
two
three
Итак, ваша команда говорит вам, что слово «огонь» появляется в общей сложности три раза, игнорируя, где в строке или сколько раз в каждой строке.
Чтобы ограничить его только совпадением в конце строки , добавьте $
в выражение:
grep -Ewo 'Fire$'