我尝试使用grep来搜索包含单词" bead"使用" \ b"但它没有找到包含单词" bead"由空间隔开。我试过这个剧本:
cat in.txt | grep -i "\bbead\b" > out.txt
我得到的结果如
但我不能得到像
这样的结果我没有获得大约2,000行,而是只获得92行
我的操作系统是Windows 10 - 64位,但我使用的是GnuWin32软件包中的grep 2.5.4。
我也尝试过MSYS2,其中包括grep 3.0,但它做同样的事情。
然后,我如何搜索由空格分隔的单词?
LATER EDIT: 貌似grep有大文件的问题。我的输入文件大小为2.4 GB。对于较小的文件,它可以工作 - 我在这里报告了错误:https://sourceforge.net/p/getgnuwin32/discussion/554300/thread/03a84e6b/
答案 0 :(得分:1)
你正常做的事情应该有效,但有办法设定什么是和不被视为词边界。而不是担心它,请尝试这样做:
cat in.txt | grep -iP "\bbead(\b|\s)" > out.txt
P选项添加Perl正则表达式幂,\ s匹配任何类型的空格字符。或者栏|
分隔了( )
在等待修复grep时,如果可以使用其他工具,则可以使用其他工具。 E.g。
perl -lane 'print if (m/\bbead\b/i);' in.txt > out.txt
答案 1 :(得分:1)
试试这个,
cat in.txt | grep -wi "bead"
-w
为您提供全文搜索