在Linux上,我有一個(gè)包含大量文件的目錄。其中一些具有非ASCII字符,但它們都是有效的UTF-8。一個(gè)程序有一個(gè)錯(cuò)誤,使其無法使用非ASCII文件名,因此我必須找出有多少錯(cuò)誤。我打算這樣做find,然后執(zhí)行g(shù)rep打印非ASCII字符,然后執(zhí)行a wc -l查找數(shù)字。不必是grep;我可以使用任何標(biāo)準(zhǔn)的Unix 正則表達(dá)式,例如Perl,sed,AWK等。但是,是否存在“不是ASCII字符的任何字符”的正則表達(dá)式?
3 回答
皈依舞
TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超3個(gè)贊
這將匹配一個(gè)非ASCII字符:
[^\x00-\x7F]
這是有效的PCRE(與Perl兼容的正則表達(dá)式)。
您還可以使用POSIX速記:
[[:ascii:]] -匹配一個(gè)ASCII字符
[^[:ascii:]] -匹配一個(gè)非ASCII字符
[^[:print:]] 可能就足夠了。**
慕蓋茨4494581
TA貢獻(xiàn)1850條經(jīng)驗(yàn) 獲得超11個(gè)贊
不,[^\x20-\x7E]不是ASCII。
這是真正的ASCII:
[^\x00-\x7F]
否則,它將修剪掉換行符和ASCII表中的其他特殊字符!
海綿寶寶撒
TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊
[^\x00-\x7F]并且[^[:ascii:]]錯(cuò)過了一些控制字節(jié),因此有時(shí)字符串可能是更好的選擇。例如,cat test.torrent | perl -pe 's/[^[:ascii:]]+/\n/g'它將對您的終端產(chǎn)生奇怪的影響,strings test.torrent并表現(xiàn)正常。
添加回答
舉報(bào)
0/150
提交
取消
