Я намерен добавить некоторые дополнительные пояснения относительно попыток OP и других ответов.
Вы также можете использовать решение Джона Кугельмана следующим образом:
grep -x "ABB\.log" a.tmp
заключение строки в кавычки и экранирование точки ( .
) делает -F
флаг больше не нужен .
Вам нужно экранировать .
(точку) (потому что он соответствует любому символу (не только .
), если он не экранирован) или использовать -F
флаг с grep. -F
flag делает его фиксированной строкой (не регулярным выражением).
Если вы не заключаете строку в кавычки, вам может потребоваться двойная обратная косая черта, чтобы избежать точки ( .
):
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
switch, заключив строку шаблона в символы ^
и $
. В этом случае убедитесь, что вы не используете -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