屏蔽問題:我需要從單個大文本文件(input.txt,100+)中找到並掩蓋(即替換爲「XXX」)某些術語(單詞/表達式) MB)。我需要找到的術語(10K +)保存在一個文件(to_mask.txt)中。我如何以有效的方式執行此操作?從大文件中查找並替換
我想分兩個步驟這樣做的:首先找到實際包含的條款
grep -Ff to_mask.txt -o -n input.txt
下一頁經過輸出行和做實際的更換(名詞 - >「XXX」)。
這似乎有點乏味,可以以更聰明的方式完成嗎?
歡迎任何基本命令的組合(grep,sed,awk,one-line-perl)!
UPDATE:
馬科斯,Kenavoz,埃德莫頓和Sobrique都給予可行的解決方案,謝謝! 我選擇Sobrique的解決方案作爲我接受的解決方案,因爲它比其他數據快得多。它可能無法處理一些特殊情況,但我相信它可以擴展到能夠這樣做,再加上它在目前的狀況下執行目前的工作。
UPDATE2:
僅供參考,這裏是由Kenavoz提供的解決方案:
sed -f <(sed 's~^~s\~~;s~$~\~XXX\~~' to_mask.txt) input.txt
我覺得你首先應該熟悉[斯肯索普問題]的概念(https://en.wikipedia.org/wiki/Scunthorpe_prob lem),然後用多於一個班輪來解決這個問題(尤其是如果涉及其他最終用戶的話)。掩碼的過濾通常以0 b 5 C u r 1 + y循環,計算機很難找到,而人類往往能夠閱讀。 –
感謝@Draw斯隆,我對垃圾郵件問題有些熟悉。但是,我需要儘可能少地使用庫(它將在客戶端運行),因此爲了簡單起見,我可能會失去一點效率。 – vivasra