如何對文字檔案中的特定字串進行二分搜尋?

如何對文字檔案中的特定字串進行二分搜尋?

我有一個文字文件,其中包含大量記錄,每筆記錄都佔一行。一些記錄具有已損壞的特殊字符,我試圖通過查找高於的多個字符序列來找到這些字符x80

這是一個單行範例,其中突出顯示了不正確的字元:

在此輸入影像描述

感興趣的十六進位字串是:

49 CC 80 C2 B9 6E

當我使用 GNU Grep 時,grep --color='auto' -P -n "[\x80-\xFF]" record.txt它僅匹配該行的一部分,它匹配上標 1 ( ¹) 但不匹配Ì

在此輸入影像描述

Grep 似乎無法將組合的字元+變音符號分開...

我想做的是只保留具有兩個或多個連續x80字元的行 - 並且能夠匹配十六進位代碼中顯示的實際字元 - 即49 CC 80 C2 B9 6E看起來它應該匹配類似的東西"[\x80-\xFF]{2,10}"- 但這種匹配確實不行。

因此,為了澄清,當我使用它時,該行匹配:

grep --color='auto' -P -n "[\x80-\xFF]" record.txt

但是當我使用它時,它不會:

grep --color='auto' -P -n "[\x80-\xFF]{2,10}" record.txt

第二個不應該也匹配嗎,因為位元組序列是CC 80 C2 B9由 4 個連續位元組組成的字串,其值為x80-xFF

答案1

這可能與區域設定相關。如果是這樣,使用 C(又稱 POSIX)語言環境(其中字元是位元組)可能會起作用:

LC_ALL=C grep --color='auto' -P -n "[\x80-\xFF]{2,10}" record.txt

答案2

Grep 可能會對奇怪的字符感到奇怪...嘗試:

grep --color='auto' -P -n "[\x80-\xFF]" record.txt |  iconv -f utf-16 -t utf-16

它可能會找回你的字母......但你的顏色會丟失。可能值得對 utf-16 和 utf-8 進行修改。

並確保您的控制台能夠處理 uft-8,並且未指派給某些 ansi 設定。

相關內容