Saya telah menggaruk-garuk kepala selama satu jam karena perl oneliner gagal karena file tersebut memiliki akhiran baris CRLF. Ia memiliki regex dengan pertandingan grup di akhir baris, dan CR diikutsertakan dalam pertandingan, membuat hal-hal buruk dengan menggunakan referensi belakang untuk penggantian.
Saya akhirnya menentukan CRLF secara manual di regex, tetapi apakah ada cara agar Perl menangani akhir baris secara otomatis apa pun itu?
Perintah aslinya adalah
perl -pe 's/foo bar(.*)$/foo $1 bar/g' file.txt
Perintah "Benar" adalah
perl -pe 's/foo bar(.*)\r\n/foo $1 bar\r\n/g' file.txt
Saya tahu saya juga dapat mengonversi akhiran baris sebelum diproses, saya tertarik dengan cara agar Perl menangani kasus ini dengan baik.
Contoh file (simpan dengan akhiran baris CRLF!)
[19:06:57.033] foo barmy
[19:06:57.033] foo baryour
Keluaran yang diharapkan
[19:06:57.033] foo my bar
[19:06:57.033] foo your bar
Output dengan perintah asli (bilah berada di awal baris karena cocok dengan gerbong kembali):
bar:06:57.033] foo my
bar:06:57.033] foo your
s
pengubah/gs
:) - person HamZa   schedule 30.10.2013\s*
tidak berhasil, masih menangkap CR di.*
- person CharlesB   schedule 30.10.2013/gs
tidak berfungsi - person CharlesB   schedule 30.10.2013$
liar, apa yang dilakukannya di sana? Bisakah Anda juga memberikan contoh masukan dan keluaran yang diharapkan? - person HamZa   schedule 30.10.2013$
ada di sini untuk mencocokkan akhir baris, saya ingin menangkap semuanya daribar
hingga akhir. Tentu itu tidak diperlukan, tetapi menghapusnya tidak mengubah apa pun - person CharlesB   schedule 30.10.2013m
? demo - person HamZa   schedule 30.10.2013