Saya bermaksud menambahkan beberapa penjelasan tambahan mengenai upaya OP dan jawaban lainnya juga.
Anda juga dapat menggunakan solusi John Kugelmans seperti ini:
grep -x "ABB\.log" a.tmp
mengutip string dan meng-escape titik ( .
) membuatnya tidak lagi membutuhkan -F
flag.
Anda perlu meng-escape .
(titik) (karena cocok dengan karakter apa pun (tidak hanya .
) jika tidak di-escape) atau gunakan -F
flag dengan grep. -F
flag menjadikannya string tetap (bukan regex).
Jika Anda tidak mengutip string, Anda mungkin perlu garis miring terbalik ganda untuk mengosongkan titik ( .
):
grep -x ABB\\.log a.tmp
Uji:
$ echo "ABBElog"|grep -x ABB.log
ABBElog #matched !!!
$ echo "ABBElog"|grep -x "ABB\.log"
#returns empty string, no match
catatan:
-x
kekuatan untuk mencocokkan seluruh garis.
- Jawaban menggunakan non escaped
.
tanpa -F
flag salah.
- Anda dapat menghindari
-x
pengalihan dengan membungkus string pola Anda dengan ^
dan $
. Dalam hal ini, pastikan Anda tidak menggunakan -F
, alih-alih escape .
, karena -F
akan mencegah interpretasi regex dari ^
dan $
.
EDIT:
(Menambahkan penjelasan tambahan tentang @hakre):
Jika Anda ingin mencocokkan string yang dimulai dengan -
, maka Anda harus menggunakan --
grep. Apapun yang mengikuti --
akan diambil sebagai masukan (bukan pilihan).
Contoh:
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