Bagaimana cara menambahkan baris baru di antara baris yang dicetak pada baris perintah?

30

Log surat sangat sulit dibaca. Bagaimana saya bisa menampilkan baris kosong antara setiap baris yang dicetak pada baris perintah? Misalnya, katakan saya sedang mengambil log. Dengan begitu, banyak garis yang dibungkus tidak menjadi bingung.

xenoterracide
sumber

Jawaban:

52
sed G 
# option: g G    Copy/append hold space to pattern space.

Gtidak sering digunakan, tetapi bagus untuk tujuan ini. sed mempertahankan dua ruang penyangga: "ruang pola" dan "ruang tahan". Garis diproses oleh sed biasanya mengalir melalui ruang pola berbagai perintah beroperasi pada isinya ( s///, p, dll); ruang penahanan mulai kosong dan hanya digunakan oleh beberapa perintah.

The Gperintah menambahkan baris baru dan isi ruang terus ke ruang pola. Program sed di atas tidak pernah menempatkan apa pun di ruang tunggu, jadi Gsecara efektif menambahkan hanya baris baru untuk setiap baris yang diproses.

Chris Johnsen
sumber
3
-E tidak perlu. perpipaan whatever | sed Gseharusnya melakukan trik.
frabjous
@frabjous: Benar, sebaiknya tinggalkan saja -ekarena di sana kita hanya perlu argumen perintah tunggal.
Chris Johnsen
Bisakah saya memberi Anda suka, +2? Paku itu!
Christian Bongiorno
tetapi, ini hanya ditampilkan di stdout, tetapi tidak menyimpannya
biolinh
8

Gunakan awk untuk menambahkan baris baru ekstra. Ini juga memungkinkan Anda menyaring hal-hal yang tidak Anda inginkan.

awk '{print $0,"\n"}' | less
KeithB
sumber
4

Gunakan sed dan ganti seluruh baris dengan sendirinya ditambah satu karakter baris baru tambahan:

grep foo /var/log/maillog | sed -e "s/^.*$/&1\n/"
fschmitt
sumber
4
Substitusi sed yang sedikit lebih sederhana adalah 's / $ / \ n /', meskipun perintah 'G' dari @Chris Johnsen bahkan lebih sederhana.
camh
3

Apakah ini yang Anda cari?

grep SPAM mail.log | while read -r line; do echo; echo $line; done

Nifle
sumber
Anda mungkin ingin menggunakan read -runtuk menghindari memperlakukan karakter backslash sebagai istimewa.
Chris Johnsen
0

Jika lebih dari sekadar melihat-lihat, saya lebih suka mengirimnya ke file teks dan buka dengan editor teks sehingga Anda dapat mengatur garis untuk membungkus atau tidak dan melakukan pencarian dengan mudah ... dan menghapus garis yang tidak diinginkan dan seterusnya tanpa harus mengetik banyak perintah.

cat file.log > log.txt dan gedit log.txtatau editor terminal seperti nano

Sunting: atau cp file.log log.txtyang tentu saja lebih mudah dan lebih cepat ... berkat komentar KeithB

laurent
sumber
1
Kenapa catdan tidak cp?
KeithB
tentu cpakan lebih mudah dan lebih cepat! ... lol - Saya sedang membaca jawaban lain yang berhubungan dengan grepdan awkjadi saya menulisnya cattetapi saya memperbaiki itu, terima kasih
laurent