我想在文本文件中找到包含两个字符的行。
我试过了:
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
但它没有捕获所需的所有行。
有什么想法吗?
答案 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.
视为两个字符的单词。