查找

2014-03-05 32 views
1

我目前正在使用這個正則表達式在文件中找到非ASCII碼點的文件非ASCII碼點,不管是什麼編碼:查找

$ cat test.txt | hd | grep -P " [8-9a-f][\da-f]" 

是否還有更好的,更簡潔,或少hacky的方法?我通常使用grep -P "[^\x00-\x7f]"來尋找攻擊性的個字符但這裏我正在尋找攻擊性的碼點

請注意,目前的hacky方法確實具有顯示周圍ASCII字符的良好副作用,這對於上下文來說非常好。

+2

額外的過程與'貓'。不會'hd shellter

+0

@shellter:謝謝,這可以清理一下。 – dotancohen

+0

而且,當然Unix工具箱的方法是使用小工具來完成1件事,並依靠管道將解決方案連接在一起('tar',你在聽嗎?)。可能有一個特定的工具用於你正在嘗試的內容,但我認爲這個解決方案(除了'cat')符合Unix/Linux編程的精神。祝你好運。 – shellter

回答

1

使用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 

這可能會或可能不會比通過hdgrep管道更快。