使用标准的Unix工具,如何在文本文件或输出中搜索可能会转换或遗漏1-2个字母的单词?
例如我的输入
function addtion(number, increment)
return number+increment
end
function additoin(number, increment)
return number+increment
end
我想在我的输入中搜索addition
并匹配addtion
和additoin
并告诉我。因为它是代码,所以检查字典是不可能的。
目前cat file.txt | grep "addition"
只会让我一无所获。
答案 0 :(得分:9)
答案 1 :(得分:1)
你不能与标准的grep进行模糊匹配,但是如果你感兴趣的是特定的拼写错误,你可以构造一个与之匹配的正则表达式。
例如:
grep add[it]*on
匹配您提供的示例拼写错误。但这对你的目的来说可能不够通用。
更好的方法可能是使用某种特定于代码所用语言的静态分析工具。它可能无法为您提供正确的拼写,但应该能够告诉您函数名称和调用的位置功能使用不同的拼写。
答案 2 :(得分:0)
尝试spell命令。注意:您可能需要一个字典(通常在您的发行版存储库中aspell-en
)。
答案 3 :(得分:0)
在linux终端上试试这个:
grep -rnw" text" ./
答案 4 :(得分:0)
正如答案所说,您绝对应该尝试agrep
。此外,还有一个更新更快的替代方法ugrep
用于模糊搜索。使用-Z2
最多允许2个错误:
ugrep -Z2 addition file.txt
插入,删除或替换是一个错误。换位(如additoin
中)计为两个错误,即两次替换。使用选项-i
进行不区分大小写的搜索,并使用-w
匹配整个单词。