在Linux上,我有一個包含大量文件的目錄。其中一些具有非ASCII字符,但它們都是有效的UTF-8。一個程序有一個錯誤,使其無法使用非ASCII文件名,因此我必須找出有多少錯誤。我打算這樣做find,然后執行grep打印非ASCII字符,然后執行a wc -l查找數字。不必是grep;我可以使用任何標準的Unix 正則表達式,例如Perl,sed,AWK等。但是,是否存在“不是ASCII字符的任何字符”的正則表達式?
3 回答

皈依舞
TA貢獻1851條經驗 獲得超3個贊
這將匹配一個非ASCII字符:
[^\x00-\x7F]
這是有效的PCRE(與Perl兼容的正則表達式)。
您還可以使用POSIX速記:
[[:ascii:]] -匹配一個ASCII字符
[^[:ascii:]] -匹配一個非ASCII字符
[^[:print:]] 可能就足夠了。**

慕蓋茨4494581
TA貢獻1850條經驗 獲得超11個贊
不,[^\x20-\x7E]不是ASCII。
這是真正的ASCII:
[^\x00-\x7F]
否則,它將修剪掉換行符和ASCII表中的其他特殊字符!

海綿寶寶撒
TA貢獻1809條經驗 獲得超8個贊
[^\x00-\x7F]并且[^[:ascii:]]錯過了一些控制字節,因此有時字符串可能是更好的選擇。例如,cat test.torrent | perl -pe 's/[^[:ascii:]]+/\n/g'它將對您的終端產生奇怪的影響,strings test.torrent并表現正常。
- 3 回答
- 0 關注
- 1098 瀏覽
添加回答
舉報
0/150
提交
取消