簡體   English   中英

如何grep unicode字符?

[英]How to grep for unicode characters?

如何使用 grep 搜索文件以查找一串 unicode 字符?

我正在嘗試計算字符串“\\xfe\\n\\xfe”的出現次數。 我可以通過執行以下操作使用 Python 找到它:

open(filename).read().count('\xfe\n\xfe')

這會找到幾千個匹配項。

但是,由於這會將整個文件加載到內存中,因此如果我嘗試搜索大於系統內存的文件,則會崩潰。

所以我試圖通過以下方式與 grep 做等效的事情:

grep -P -c "\xfe\n\xfe" filename

它幾乎消耗了 0 個內存,這很好,但是即使我在同一個文件上運行它,它也找到了 0 個匹配項。 我的語法有什么問題?

您不需要將整個文件讀入內存。 您可以迭代文件並計算該字符串跨行的出現次數,每次取一對行:

count = 0
with open(filename) as f:
   prev_line = next(f)
   for line in f:
      if prev_line.endswith('\xfe\n') and line.startswith('\xfe'):
         count += 1
      prev_line = line

所以我試圖通過以下方式與 grep 做等效的事情:

 grep -P -c "\\xfe\\n\\xfe" filename

它幾乎消耗了 0 個內存,這很好,但是即使我在同一個文件上運行它,它也找到了 0 個匹配項。 我的語法有什么問題?

問題是grep是基於行的,不會與\\n換行符匹配模式。 有一些 grep 變體可以跨換行符匹配模式,例如ugrep

ugrep -c "\xfe\n\xfe" filename

另一個好處是,如果您需要,則 ugrep 會為二進制匹配生成十六進制轉儲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM