慕妹3242003
2019-08-29 08:28:08
如何grep所有非ASCII字符?我有幾個非常大的XML文件,我試圖找到包含非ASCII字符的行。我嘗試過以下方法:grep -e "[\x{00FF}-\x{FFFF}]" file.xml但是這會返回文件中的每一行,無論該行是否包含指定范圍內(nèi)的字符。我的語法有錯嗎?或者我做錯了什么?我也嘗試過:egrep "[\x{00FF}-\x{FFFF}]" file.xml(模式周圍有單引號和雙引號)。
3 回答

絕地?zé)o雙
TA貢獻(xiàn)1946條經(jīng)驗 獲得超4個贊
您可以使用以下命令:
grep --color='auto' -P -n "[\x80-\xFF]" file.xml
這將為您提供行號,并以紅色突出顯示非ascii字符。
在某些系統(tǒng)中,根據(jù)您的設(shè)置,上述操作無效,因此您可以通過反向操作
grep --color='auto' -P -n "[^\x00-\x7F]" file.xml
另請注意,重要的位是-P
等于的標(biāo)志--perl-regexp
:因此它將您的模式解釋為Perl正則表達(dá)式。它也說
這是高度實驗性的,grep -P可能會警告未實現(xiàn)的功能。

繁花如伊
TA貢獻(xiàn)2012條經(jīng)驗 獲得超12個贊
正如大多數(shù)上述解決方案所做的那樣,不是對非ASCII字符的字節(jié)范圍做出假設(shè),而是明確更好地了解ASCII字符的實際字節(jié)范圍。
所以第一個解決方案將成為:
grep --color='auto' -P -n '[^\x00-\x7F]' file.xml
(基本上對于十六進(jìn)制ASCII范圍之外的任何字符進(jìn)行g(shù)reps:從\ x00到\ x7F)
在Mountain Lion上無法工作(由于缺少BSD grep中的PCRE支持),但是pcre
通過Homebrew安裝,以下內(nèi)容也可以正常工作:
pcregrep --color='auto' -n '[^\x00-\x7F]' file.xml
任何人可以想到的任何利弊?
添加回答
舉報
0/150
提交
取消