如何使用grep查找包含两个字母单词的行

时间:2014-11-19 19:19:21

标签: unix grep

我想在文本文件中找到包含两个字符的行。

我试过了:

grep '..' file.txt
grep '[..]' file.txt
grep -w '..' file.txt
grep -w '[..]' file.txt
egrep '(\b^[.]|[.]$)' file.txt
egrep '(\b^[.]|[.]$|[..])' file.txt
egrep '..|[..]' file.txt

但它没有捕获所需的所有行。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用“字模式”:

$ cat file.txt
A AB CDE
ABD KJSD
SD DAD LD

$ grep -w '..' file.txt 
A AB CDE
SD DAD LD

来自man grep

   -w, --word-regexp
          Select  only  those  lines  containing  matches  that form whole
          words.  The test is that the matching substring must  either  be
          at  the  beginning  of  the  line,  or  preceded  by  a non-word
          constituent character.  Similarly, it must be either at the  end
          of  the  line  or  followed by a non-word constituent character.
          Word-constituent  characters  are  letters,  digits,   and   the
          underscore.

您尝试的问题是您使用字符类(用方括号表示)。所以你的正则表达式只是文字点的冗余匹配。如果你删除方括号,它将匹配两个字符的任意组合,这似乎是你想要的,但这不是一个正确的解决方案,因为.将匹配非单词字符。

答案 1 :(得分:0)

以下是一些awk版本。

awk '{f=0;for (i=1;i<=NF;i++) if (length($i)==2) f=1}f' file

如果该行中的任何字段为2个字符,请设置标记f 如果标记f为true,则打印该行。


awk 'gsub(/(^|[ \t])..([ \t\.\?]|$)/,"&")' file

如果只有两个字符,则尝试更改文本 在行的开头跟随空格或制表符,以空格/制表符/./或行尾结束。

这也适用于以下行:

This may become it.

字段长度的测试在此行上将失败,并且不会将it.视为两个字符的单词。