Bagaimana saya bisa memformat output grep saya untuk menampilkan nomor baris di akhir baris, dan juga jumlah klik?


378

Saya menggunakan grep untuk mencocokkan string dalam file. Berikut ini contoh file:

example one,
example two null,
example three,
example four null,

grep -i null myfile.txt kembali

example two null,
example four null,

Bagaimana saya bisa mengembalikan baris yang cocok bersama dengan nomor baris mereka seperti ini:

  example two null, - Line number : 2
  example four null, - Line number : 4
  Total null count : 2

Saya tahu -c mengembalikan total baris yang cocok, tetapi saya tidak tahu bagaimana memformatnya dengan benar untuk ditambahkan total null countdi depan, dan saya tidak tahu bagaimana cara menambahkan nomor baris.

Apa yang dapat saya?

Jawaban:


600

-n mengembalikan nomor baris.

-iadalah untuk mengabaikan kasus. Hanya untuk digunakan jika pencocokan kasus tidak diperlukan

$ grep -in null myfile.txt

2:example two null,
4:example four null,

Kombinasikan dengan awkuntuk mencetak nomor baris setelah pertandingan:

$ grep -in null myfile.txt | awk -F: '{print $2" - Line number : "$1}'

example two null, - Line number : 2
example four null, - Line number : 4

Gunakan subtitusi perintah untuk mencetak jumlah nol total:

$ echo "Total null count :" $(grep -ic null myfile.txt)

Total null count : 2

dapatkah saya memformat ini dengan menambahkan nomor baris setelah bukannya sebelumnya dengan:?
London

solusi Anda tampaknya baik tetapi mendapatkan kesalahanawk95: syntax error at source line context is >>> ' <<< missing } awk95: bailing out at source line 1
London

maaf beralih ke linux sekarang sudah bekerja :) itu versi windows tidak begitu baik
London

1
... para ksatria yang mengatakan itu adalah -nibagaimana Anda mengingat trik ini
santiago arizti

59

Gunakan -natau --line-number.

Lihat man grepbanyak opsi lainnya.


3
pengguna linux baru malas membaca halaman manual. Tetapi jika mereka cukup menggunakan linux, mereka akan terbiasa :) Sangat berguna :)
Dzung Nguyen

19
Tidak selalu malas, (Tapi kadang-kadang), sering kali itu adalah pengguna Linux baru yang kesulitan memahami halaman manual. (Mereka tampak samar)
TecBrat

terkadang halaman manual dapat mengambil banyak halaman. Dan ini sulit dibaca semuanya
Eugen Konkov

7

menggunakan grep -n -i null myfile.txt untuk menampilkan nomor baris di depan setiap pertandingan.

Saya tidak berpikir grep memiliki saklar untuk mencetak jumlah total baris yang cocok, tetapi Anda bisa mem-pipe output grep ke wc untuk mencapai itu:

grep -n -i null myfile.txt | wc -l

3
-c akan mencetak total garis yang cocok
dpatchery

Kamu benar. Sayangnya itu juga menekan output normal.
jhenninger

7

Atau gunakan awk:

awk '/null/ { counter++; printf("%s%s%i\n",$0, " - Line number: ", NR)} END {print "Total null count: " counter}' file

4

grepmenemukan garis dan menampilkan nomor baris, tetapi tidak membiarkan Anda "memprogram" hal-hal lain. Jika Anda ingin menyertakan teks sewenang-wenang dan melakukan "pemrograman" lainnya, Anda dapat menggunakan awk,

$ awk '/null/{c++;print $0," - Line number: "NR}END{print "Total null count: "c}' file
example two null,  - Line number: 2
example four null,  - Line number: 4
Total null count: 2

Atau hanya menggunakan shell (bash / ksh)

c=0
while read -r line
do
  case "$line" in
   *null* )  (
    ((c++))
    echo "$line - Line number $c"
    ;;
  esac
done < "file"
echo "total count: $c"

3

atau dalam perl (untuk kelengkapan ...):

perl -npe 'chomp; /null/ and print "$_ - Line number : $.\n" and $i++;$_="";END{print "Total null count : $i\n"}'


1

Hanya berpikir saya akan sesuatu yang dapat membantu Anda di masa depan. Untuk mencari beberapa string dan nomor baris output dan menelusuri melalui output, ketik:

egrep -ne 'null|three'

akan menunjukkan:

2:example two null,  
3:example three,  
4:example four null,   

egrep -ne 'null|three' | less

akan menampilkan output dalam sesi kurang

HTH Juni

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.