Saya menggunakan gradle run
untuk memulai server REST. Output dari server REST terlihat seperti ini:
XXX.XXX.XX.XXX - <moreinfo>
randomtext
randomtext
XXX.XXX.XX.XXX - <moreinfo>
XXX.XXX.XX.XXX - <moreinfo>
randomtext
XXX.XXX.XX.XXX - <moreinfo>
XXX.XXX.XX.XXX
di sini adalah alamat IP, randomtext adalah pesan kesalahan. Sayangnya, semua output diarahkan ke stdout.
Bagaimana saya bisa mengarahkan semua baris yang dimulai dengan alamat IP ke file yang dipanggil err.log
dan setiap baris lainnya all.log
?
Sayangnya, gradle run
hanya dapat dimulai sekali dan tidak berhenti, karena ini adalah server REST.
Mungkin menggunakan tee
, grep
kombinasi?
sumber
err.log
kosong dan semua output diarahkan untukall.log
menggunakantee
perintah di atas.err.log
ada sama sekali maka perintah dijalankan tetapi tidak ada yang keluar.grep -E
dengan ekspresi yang digunakan dalam perintah awk harus cocok, atau tidak di sini.all.log
tidak mengandung baris yang cocok dalam ekspresi grep?all.log
danerr.log
dengan perintah lama. Maaf bila membingungkan. Terima kasih, Anda luar biasa :)) !!Jadi, sepertinya
gradle run
tidak sesuai dengantee
,pee
,grep
dan io-redirection. Selalu berhenti membaca setelah 4096 byte.Untuk menghindari masalah ini, saya
read
setiap barisgradle run
. Saya belum mengujinya, tapi saya rasa membaca baris yang lebih dari 4k karakter juga akan gagal.Bagaimanapun, ini adalah kode untuk menyelesaikan pertanyaan saya secara khusus:
sumber
read -r line
danprintf '%s\n' "$line"
untuk menghindari beberapa kasus tepi yang merusak barang.