Di Linux, saya memiliki direktori dengan banyak file. Beberapa dari mereka memiliki karakter non-ASCII, tetapi semuanya adalah UTF-8 yang valid . Satu program memiliki bug yang mencegahnya bekerja dengan nama file non-ASCII, dan saya harus mencari tahu berapa banyak yang terpengaruh. Saya akan melakukan ini dengan find
dan kemudian melakukan grep untuk mencetak karakter non-ASCII, dan kemudian melakukan a wc -l
untuk menemukan nomornya. Tidak harus grep; Saya dapat menggunakan ekspresi reguler standar Unix , seperti Perl , sed , AWK , dll.
Namun, apakah ada ekspresi reguler untuk 'karakter apa pun yang bukan karakter ASCII'?
/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x9F]
Jawaban:
Ini akan cocok dengan satu karakter non-ASCII:
Ini adalah PCRE ( Ekspresi Reguler Perl Kompatibel Kompatibel ) yang valid .
Anda juga dapat menggunakan singkatan POSIX :
[[:ascii:]]
- Cocok dengan satu karakter ASCII[^[:ascii:]]
- Cocok dengan satu karakter non-ASCII[^[:print:]]
mungkin akan cukup untuk Anda. **sumber
^
valid di PCRE.:print:
tidak bekerja di terminal UTF8? Ini bekerja untuk saya di pry di terminal UTF8:27.chr =~ /[^[:print:]]/
rename 's/[^\x00-\x7F]//g' *
(Anda dapat menggunakannya-n
untuk memeriksa nama-nama yang ok terlebih dahulu).Tidak,
[^\x20-\x7E]
bukan ASCII.Ini ASCII yang asli:
Jika tidak, ini akan memangkas baris baru dan karakter khusus lainnya yang merupakan bagian dari tabel ASCII!
sumber
Anda juga dapat memeriksa halaman ini: Ekspresi Reguler Unicode , karena berisi beberapa kelas karakter Unicode yang berguna, seperti:
sumber
[^\x00-\x7F]
dan[^[:ascii:]]
kehilangan beberapa byte kontrol sehingga string bisa menjadi pilihan yang lebih baik kadang-kadang. Misalnyacat test.torrent | perl -pe 's/[^[:ascii:]]+/\n/g'
akan melakukan hal-hal aneh ke terminal Anda, di mana sepertistrings test.torrent
akan berperilaku.sumber
Memvalidasi Kotak Teks Terima Ascii Hanya gunakan Pola ini
[\x00-\x7F]+
sumber
Saya menggunakan
[^\t\r\n\x20-\x7E]+
dan itu tampaknya berfungsi dengan baik.sumber
Anda dapat menggunakan regex ini:
Case ask, opsinya adalah Multiline .
sumber
Anda tidak benar-benar membutuhkan regex.
Ini akan menunjukkan nama file dengan karakter kontrol di namanya juga, tetapi saya menganggap itu sebagai fitur.
Jika Anda tidak memiliki file yang cocok, glob akan berkembang menjadi sendiri, kecuali jika Anda telah
nullglob
menetapkan. (Ekspresi tidak cocok dengan dirinya sendiri, jadi secara teknis, output ini tidak ambigu.)sumber
Ini ternyata sangat fleksibel dan dapat diperpanjang. $ field = ~ s / [^ \ x00- \ x7F] // g; # dengan demikian semua non ASCII atau item tertentu yang dimaksud dapat dibersihkan. Sangat bagus baik dalam pemilihan atau pra-pemrosesan item yang pada akhirnya akan menjadi kunci hash.
sumber