Zamierzam dodać dodatkowe wyjaśnienia dotyczące prób OP i innych odpowiedzi.
Możesz również użyć rozwiązania Johna Kugelmana w następujący sposób:
grep -x "ABB\.log" a.tmp
cytowanie łańcucha i unikanie znaku kropki ( .
) sprawia, że -F
flaga nie jest już potrzebna .
Musisz uciec od .
(kropki) (ponieważ pasuje do dowolnego znaku (nie tylko .
), jeśli nie jest zmieniony) lub użyć -F
flagi z grep. -F
flaga sprawia, że jest to stały ciąg (nie wyrażenie regularne).
Jeśli nie podasz cudzysłowu, możesz potrzebować podwójnego odwrotnego ukośnika, aby uniknąć kropki ( .
):
grep -x ABB\\.log a.tmp
Test:
$ echo "ABBElog"|grep -x ABB.log
ABBElog #matched !!!
$ echo "ABBElog"|grep -x "ABB\.log"
#returns empty string, no match
Uwaga:
-x
siły, aby dopasować całą linię.
- Odpowiedzi używające bez zmiany znaczenia
.
bez -F
flagi są błędne.
- Możesz uniknąć
-x
zmiany, owijając ciąg wzorca za pomocą ^
i $
. W takim przypadku upewnij się, że nie używasz -F
, zamiast tego ucieknij przed .
, ponieważ -F
uniemożliwi to interpretację wyrażeń regularnych ^
i $
.
EDYCJA:
(Dodanie dodatkowego wyjaśnienia w odniesieniu do @hakre):
Jeśli chcesz dopasować ciąg zaczynający się od -
, powinieneś użyć --
z grep. Cokolwiek nastąpi, --
zostanie przyjęte jako dane wejściowe (nie opcja).
Przykład:
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