Saya memiliki file log yang dihasilkan dari output ke stderr dari aplikasi simpul berbasis javascript. (output ke file txt berasal dari plugin kasar yang disebut 'logfile-grunt' tepatnya)

Bagian lain dari program javascript menghasilkan 'progress bar' pada output konsol. Di keluaran konsol, bilah kemajuan hanya satu baris yang terus diperbarui, tetapi di logfile setiap status bilah kemajuan dicatat dalam logfile yang dikelilingi oleh semacam karakter khusus yang saya pikir adalah kode pelarian ANSI: ESC[1G di awal setiap baris dan ESC[0K, di mana 'ESC' adalah simbol tunggal.

Saya ingin menggunakan regex untuk menelusuri file log dan mencocokkan semuanya dari bilah kemajuan termasuk kode pelarian dan menghapusnya.

Apa ekspresi regex javascript yang akan cocok dengan ini?

Contoh output dalam file log seperti yang ditampilkan dalam teks Sublime sebagai teks biasa:

    uploading images
    NUMBER OF IMAGE FILES: 406
    ESC[1G[--------------------------------------------------] 1/406ESC[0K
    ESC[1G[=-------------------------------------------------] 2/406ESC[0K
    ESC[1G[==------------------------------------------------] 3/406ESC[0K
    ESC[1G[===-----------------------------------------------] 4/406ESC[0K
    ESC[1G[====----------------------------------------------] 5/406ESC[0K
    -----------------------------------------------
    >> Task completed, blah blah

Setelah menggunakan alat temukan dan ganti berbasis regex, saya ingin file terlihat seperti:

    uploading images
    NUMBER OF IMAGE FILES: 406
    -----------------------------------------------
    >> Task completed, blah blah

Ini hanya ekspresi regex untuk mencocokkan garis progress bar dengan karakter kontrol khusus yang harus saya cocokkan

EDIT menunjukkan contoh output dengan nomor baris yang ditunjukkan:

    1    uploading images
    2    NUMBER OF IMAGE FILES: 406
    3    ESC[1G[--------------------------------------------------] 1/406ESC[0K
         ESC[1G[=-------------------------------------------------] 2/406ESC[0K
         ESC[1G[==------------------------------------------------] 3/406ESC[0K
         ESC[1G[===-----------------------------------------------] 4/406ESC[0K
         ESC[1G[====----------------------------------------------] 5/406ESC[0K
    4    -----------------------------------------------
    5    >> Task completed, blah blah
0
johowie 17 Agustus 2017, 06:30

2 jawaban

Jawaban Terbaik

Hal penting yang harus disadari adalah saya mencoba mencocokkan kode pelarian ANSI yang diawali dengan karakter ESC. Untuk mencocokkan karakter ESC, yaitu karakter ASCII 1B dalam heksadesimal, pemilihnya adalah \x1b.

Jadi regex saya menjadi

/\x1b\[1G.*\x1b\[0K/g

0
johowie 20 Agustus 2017, 01:46

Karena data tampaknya selalu terbentuk dengan baik, Anda dapat mengambil pendekatan untuk mencocokkan string tertentu yang Anda tahu akan ada dan mengelompokkan semuanya di antaranya.

(FILES: \d+\n)([\s\S]*\n(\s)*)-

Dalam hal ini, Anda cukup mengganti grup penangkap kedua dengan '' untuk mencapai apa yang Anda cari atau Anda dapat mengganti kecocokan penuh dengan $1 untuk memasukkan kembali jumlah file dan jeda baris.

0
i-man 17 Agustus 2017, 06:33