Saya memiliki beberapa file teks besar dan dalam file UNIQS.txt
Saya memiliki daftar string ke grep
dari berkas lain. Kode yang saya gunakan adalah
grep -f UNIQS.txt EEP_VSL.uniqs.sam > UNIQ_templates.sam
yang tidak melakukan apa pun – file yang dihasilkan kosong. Tapi ketika saya melakukannya
grep -F -f UNIQS.txt EEP_VSL.uniqs.sam > UNIQ_templates.sam
itu bekerja dengan benar. Ini membingungkan saya karena saya tidak berpikir grep
akan menafsirkan entri di UNIQS.txt
sebagai pola regexp tanpa tanda kutip dan garis miring dan seterusnya dalam file (yang tidak ada). Apakah kasusnya secara umum jika Anda mendapatkan pola dari file maka secara otomatis akan berpikir bahwa itu adalah pola regexp?
Sunting: Dalam UNIQS.txt
file, ada baris baru yang dipisahkan string dari formulir
HWI-ST365:215:D0GH0ACXX:2:1101:10034:186783
(disebut nama template) dan file EEP_VSL...
tab kolom yang dipisahkan, dengan sekitar 14 kolom dan kolom pertama adalah nama template, jadi pada dasarnya saya ingin mengekstrak baris yang sesuai dengan setiap template dalam file.
Jawaban yang Diterima:
-f
opsi menentukan file tempat grep membaca pola. Itu seperti meneruskan pola pada baris perintah (dengan -e
opsi jika ada lebih dari satu), kecuali bahwa saat Anda menelepon dari shell, Anda mungkin perlu mengutip pola untuk melindungi karakter khusus di dalamnya agar tidak diperluas oleh shell.
Argumen -E
atau -F
atau -P
, jika ada, memberi tahu grep di sintaks mana pola ditulis. Tanpa argumen, grep mengharapkan ekspresi reguler dasar; dengan -E
, grep mengharapkan ekspresi reguler yang diperluas; dengan -P
(jika didukung), grep mengharapkan ekspresi reguler Perl; dan dengan -F
, grep mengharapkan string literal. Apakah polanya berasal dari baris perintah atau dari file tidak masalah.
Perhatikan bahwa string adalah substring:jika Anda melewati a+b
sebagai pola maka garis yang berisi a+b+c
cocok. Jika Anda ingin menelusuri baris yang berisi persis salah satu string yang disediakan dan tidak lebih dari itu, teruskan -x
pilihan.