[英]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.