GNU/Linux >> Belajar Linux >  >> Linux

Garis grep dimulai dengan 1, tetapi bukan 10, 11, 100 dll

Pertanyaan di isi

Pilih baris yang dimulai dengan 1 dan diikuti oleh spasi

grep -c '^1\s'          file
grep -c '^1[[:space:]]' file

Itu juga akan memberikan hitungan baris (tanpa perlu panggilan ke wc)

Pertanyaan di judul

A 1 tidak diikuti oleh nomor lain (atau tidak sama sekali):

grep -cE '^1([^0-9]|$)' file 

Namun kedua solusi di atas memiliki beberapa masalah menarik, baca terus.

Di badan pertanyaan, pengguna mengklaim bahwa file tersebut "dibatasi tab".

Pembatas

tab

Baris yang dimulai dengan 1 diikuti oleh tab (tab yang sebenarnya dalam perintah). Ini gagal jika pembatasnya adalah spasi (atau lainnya, atau tidak sama sekali):

grep '^1    ' file

ruang

Baris yang dimulai dengan 1 diikuti dengan spasi (spasi aktual dalam perintah). Ini gagal jika pembatasnya adalah yang lain atau tidak sama sekali.:

grep '^1 ' file

tab atau spasi

grep '^1(   | )' file
grep '^1[[:blank:]]' file

spasi putih

Opsi yang lebih fleksibel adalah menyertakan beberapa karakter spasi (horizontal dan vertikal). [:space:] set kelas karakter terdiri dari (spasi), \t (tab horizontal), \r (carriage return),\n (baris baru), \v (tab vertikal) dan \f (bentuk pakan). Tapi grep tidak bisa cocok dengan baris baru (ini adalah batasan internal yang hanya bisa dihindari dengan -z pilihan). Dimungkinkan untuk menggunakannya sebagai deskripsi pada pembatas. Dimungkinkan juga, dan lebih pendek, untuk menggunakan singkatan GNU yang tersedia dari \s :

grep -c '^1[[:space:]]` file
grep -c '^1\s'          file

Tetapi opsi ini akan gagal jika pembatasnya seperti tanda titik dua : atau karakter tanda baca lainnya (atau huruf apa pun).

Batas

Atau, kita dapat menggunakan transisi dari digit ke batas "bukan digit", sebenarnya "karakter yang tidak ada dalam [_[:alnum:]] (_a-zA-Z0-9 )":

grep -c  '^1\b' file       # portable but not POSIX.
grep -c  '^1\>' file       # portable but not POSIX.
grep -wc '^1'   file       # portable but not POSIX.
grep -c  '^1\W' file       # portable but not POSIX (not match only a `1`) (not underscore in BSD).

Ini akan menerima sebagai baris valid yang dimulai dengan 1 dan diikuti oleh beberapa karakter tanda baca.


Sepertinya Anda hanya menginginkan ini:

$ grep '^1\b' a
1        TGCAG.....
1        TGCAG......

Untuk bagian penghitungan ini:

$ grep -c '^1\b' file
2

Dengan awk :

awk '$1 == "1" { print; x++ } END { print x, "total matches" }' inputfile

Linux
  1. Cetak Garis Antara (dan Termasuk) Dua Pola?

  2. Bagaimana Cara Mengeluarkan File &Mengabaikan Baris Yang Dimulai Dengan "?"?

  3. Hapus baris kosong dalam file teks melalui grep

  1. Inti dibuang, tetapi file inti tidak ada di direktori saat ini?

  2. Jalankan skrip dengan rc.local:skrip berfungsi, tetapi tidak saat boot

  3. Bagaimana cara meminta file tetapi tidak menyimpannya dengan Wget?

  1. Mencantumkan semua alamat email dalam file dengan grep

  2. /etc/passwd menampilkan pengguna dalam grup, tetapi /etc/group tidak

  3. Sortir dengan pemisah bidang