Я намерен добавить некоторые дополнительные объяснения относительно попыток ОП и других ответов.
Вы можете использовать решение Джона Кугельманса , например, так:
grep -x "ABB\.log" a.tmp
цитирование строки и экранирование точки (.
) приводят к тому, что ей больше не требуется флаг -F
.
Вам необходимо экранировать .
(точка) (потому что он соответствует любому символу (не только .
), если не экранирован), либо используйте флаг -F
с grep.Флаг -F
делает его фиксированной строкой (не регулярное выражение).
Если вы не заключите в кавычки строку, вам может понадобиться двойной обратный слеш для выхода из точки (.
):
grep -x ABB\\.log a.tmp
Тест:
$ echo "ABBElog"|grep -x ABB.log
ABBElog #matched !!!
$ echo "ABBElog"|grep -x "ABB\.log"
#returns empty string, no match
Примечание:
-x
заставляет совпадать по всей строке. - Ответы с использованиемнеправильный
.
без -F
флаг неправильный. - Вы можете избежать переключения
-x
, обернув строку шаблона с ^
и $
.В этом случае убедитесь, что вы не используете -F
, вместо этого экранируйте .
, поскольку -F
предотвратит интерпретацию регулярного выражения ^
и $
.
РЕДАКТИРОВАТЬ: (Добавление дополнительных пояснений в отношении @hakre):
Если вы хотите сопоставить строку, начинающуюся с -
, то вы должны использовать --
с grep.Что бы ни следовало, --
будет приниматься за вход (не опция).
Пример:
echo -f |grep -- "-f" # where grep "-f" will show error
echo -f |grep -F -- "-f" # whre grep -F "-f" will show error
grep "pat" -- "-file" # grep "pat" "-file" won't work. -file is the filename