Grep的单词边界包括空格?

时间:2017-11-08 18:01:10

标签: grep words

我尝试使用grep来搜索包含单词" bead"使用" \ b"但它没有找到包含单词" bead"由空间隔开。我试过这个剧本:

cat in.txt | grep -i "\bbead\b" > out.txt

我得到的结果如

  • BEAD-air.JPG
  • 珠子,3面MET DP110317.jpg
  • 珠。 -2819(FindID 10143).jpg
  • Bead(宝石),Phu Hoa遗址(同奈省)的人工制品.jpg
  • Romano-British坠饰护身符(珠子)(FindID 241983).jpg

但我不能得到像

这样的结果
  • Bead fun.jpg

我没有获得大约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/

2 个答案:

答案 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为您提供全文搜索