我目前正在使用這個正則表達式在文件中找到非ASCII碼點的文件非ASCII碼點,不管是什麼編碼:查找
$ cat test.txt | hd | grep -P " [8-9a-f][\da-f]"
是否還有更好的,更簡潔,或少hacky的方法?我通常使用grep -P "[^\x00-\x7f]"
來尋找攻擊性的個字符但這裏我正在尋找攻擊性的碼點。
請注意,目前的hacky方法確實具有顯示周圍ASCII字符的良好副作用,這對於上下文來說非常好。
我目前正在使用這個正則表達式在文件中找到非ASCII碼點的文件非ASCII碼點,不管是什麼編碼:查找
$ cat test.txt | hd | grep -P " [8-9a-f][\da-f]"
是否還有更好的,更簡潔,或少hacky的方法?我通常使用grep -P "[^\x00-\x7f]"
來尋找攻擊性的個字符但這裏我正在尋找攻擊性的碼點。
請注意,目前的hacky方法確實具有顯示周圍ASCII字符的良好副作用,這對於上下文來說非常好。
使用HD,這應該是更快:
hd test.txt |grep -w '[89a-f][0-9a-f]'
(grep -P
調用libpcre和較慢grep -w
搜索只是「詞」,將默認爲標準的POSIX正則表達式,這是幾乎一樣快的-F
平原。文本查詢從管道中刪除cat
還節省了(微不足道的)努力。)
如果您不想要上下文,則可以給grep -o
標誌。如果希望更清楚地調出上下文,請考慮--color
(或者如果您將輸出管道輸送到某處並且不介意着色控制字符),請考慮--color
(或甚至--color=always
)。你也可以找到grep的-n
標誌有用,它會給你行號。
我認爲你可以使用grep的-a
標誌,以達到你所要查找的內容在一個命令(這會強制閱讀一切爲文本,而不是輸出無用「的test.txt匹配二進制文件」),儘管你可能不喜歡輸出到你的終端。也許管成一個文件,然後查看該文件與vim
(它不同於less
,將不呈現控制字符):
grep -aP '[^\x00-\x7f]' test.txt > found-highchars
view found-highchars
這可能會或可能不會比通過hd
和grep
管道更快。
額外的過程與'貓'。不會'hd
shellter
@shellter:謝謝,這可以清理一下。 – dotancohen
而且,當然Unix工具箱的方法是使用小工具來完成1件事,並依靠管道將解決方案連接在一起('tar',你在聽嗎?)。可能有一個特定的工具用於你正在嘗試的內容,但我認爲這個解決方案(除了'cat')符合Unix/Linux編程的精神。祝你好運。 – shellter