\f
adalah karakter umpan formulir di Perl. Sepertinya file-file cacat ini dibuat oleh seseorang yang baru untuk Perl dan XML.
Berikut adalah banyak perbaikan Perlier - yang juga memenuhi tujuan OP mengotomatiskan pembaruan semua file, tidak seperti jawaban yang diterima dengan sed, yang hanya akan bekerja pada satu file pada satu waktu karena tidak dipasangkan find
.
\f
hanya bisa digunakan sendiri bukan kode heksadesimal x0c
.
find . -type f -exec perl -pi.bkp -e 's [ \f ilename ][ /f ilename ]gx' {} \;
Di sini saya telah menambahkan -type f
ke tel find
untuk hanya mengembalikan file biasa - jika tidak find
akan kembali .
dalam daftar, dan memicu peringatan ketika Anda mencoba mengeditnya, meskipun semuanya masih berfungsi.
Saya juga membuat regex lebih mudah dilihat dengan menggunakan x
flag yang mengabaikan spasi putih nyata, memungkinkan Anda untuk menghilangkan elemen-elemen dari regex Anda. Jika Anda tidak suka ini, ini dia tanpa:
find . -type f -exec perl -pi.bkp -e 's[\filename][/filename]g' {} \;
Dan dalam hal kemungkinan bahwa semua karakter umpan formulir adalah palsu dan semua harus diganti /f
, maka Anda dapat melangsingkan satu baris lebih jauh:
find . -type f -exec perl -pi.bkp -e 's[\f][/f]g' {} \;
Anda tidak perlu menggunakan garis miring maju untuk mengelilingi elemen perintah substitusi regex Anda ( s///
) di Perl. Anda bisa menggunakan simbol apa saja. Namun, jika Anda memilih untuk menggunakan jenis simbol seperti braket apa pun, Anda harus menggunakan keduanya: s[old][new]
misalnya.
Karena saya tidak menggunakan garis miring, saya tidak perlu melepaskan garis miring.
Adapun -i.bkp
: perl -pi -e
memungkinkan Anda mengedit di tempat - tetapi jika Anda ingin asuransi tambahan jika Anda salah menemukan dan mengganti program Perl, Anda dapat memasukkan ekstensi file sehingga akan membuat salinan file asli untuk kamu. Di sini, saya sudah menggunakan .bkp
.
Dalam versi terbaru dari Perl, pengeditan di tempat telah diperbarui agar lebih tangguh jika sistem Anda mengalami masalah serius seperti kehilangan daya atau kehabisan ruang disk juga. Inilah Perl penulis brian d foy pada peningkatan pengeditan di tempat di Perls baru-baru ini.
Anda harus mempertimbangkan untuk menggunakan Perl untuk tugas-tugas semacam ini, karena ini adalah bahasa pemrograman tujuan umum yang sangat kuat namun di bawah rata-rata, salah satu yang tujuan desain awalnya adalah untuk menggantikan sed
dan awk
dengan sesuatu yang jauh lebih baik.
Kemampuan pencocokan regex Perl 5 dan ditingkatkan sintaks regex jauh melebihi orang-orang dari sed
, awk
, dan memang setiap bahasa pemrograman lain selain Perl 6, membuat Perl pilihan yang paling masuk akal untuk kedua sederhana dan manipulasi regex maju.
Untuk memperjelas: sed
akan bekerja dengan baik find
juga dan Anda juga dapat menggunakan sed -i.bkp
untuk membuat cadangan dari setiap file yang diedit, tetapi sejauh yang saya tahu itu tidak menampilkan ketahanan ekstra di Perl 5.28 dan di atasnya. Itu juga menggunakan sintaks regex UNIX ® clunkier dan jauh lebih kuat.
<\filename>
alih-alih</filename>
dalam konteks di mana\f
akan diartikan sebagai bentuk feed karakter. Anda mungkin harus melacak sumber file-file ini dan menunjukkan masalah dengan alat pembangkitnya kepada pengembang. Untuk memperbaiki file, jawaban yang diterima baik-baik saja.