Saya kadang perlu memeriksa beberapa log dan saya melakukan ini dengan perintah ini:
egrep -o "success|error|fail" <filename> | sort | uniq -c
Input sampel:
test error on line 10
test connect success
test insert success
test started at 00:00
test delete fail
Output sampel:
1 error
1 fail
2 success
Saya ingin tahu apakah ada yang tahu cara melakukan ini dengan perintah yang lebih pendek?
Sebelum Anda bertanya mengapa saya ingin melakukan ini dengan perintah yang berbeda ... Tidak ada alasan khusus, saya hanya ingin tahu :)
command-line
grep
alternative
Wolfy
sumber
sumber
Tidak jauh lebih pendek, tetapi karena Anda tidak benar-benar membutuhkan ekspresi reguler, ada
fgrep
(grep -F
).cara lain untuk menulis hal yang sama di bash:
sumber
Anda dapat menulis skrip bash sederhana dan kemudian memanggil skrip tersebut, seperti:
dan simpan sebagai (misalnya)
myscript.sh
. Kemudian lakukanchmod +x myscript.sh
dan Anda bisa menyebutnya sepertimyscript.sh <filename>
.sumber
Perintah Anda, walaupun pendek dan manis, adalah cara yang agak berputar untuk menghitung kemunculan suatu istilah. Saya mungkin akan mengambil pendekatan langsung, tumpul dan menggunakan grep's -c flag (yang melakukan hal itu) di dalam lingkaran shell:
Tidak sesingkat, tidak menarik, berpotensi lebih cepat untuk file log besar (tidak
sort
). Saya akan mengatakan itu mencuci.sumber
Ini bisa menjadi jawaban bodoh tetapi saya pikir, dalam hal ini,
sort
sangat tidak berguna; mungkin Anda bisa menghilangkannya. Namun demikian di sini kita menggunakan tiga perintah berbeda untuk tiga tindakan berbeda.Kita dapat menyingkatnya jika beberapa dari mereka dapat dihubungi dengan beberapa opsi
grep
, tapi saya tidak melihat yang mana ... :)sumber
2 success 1 fail 1 success
.