我需要使用包含2-6'x的<{1}}命令显示所有行
还需要知道如何显示连续3个'x'的所有行
我已经尝试了grep
,但我一直收到一条错误消息,指出在目录中找不到grep x{2,6} example.txt
。我的示例文件包含7行,每行中'x'的数量增加一行。
答案 0 :(得分:2)
我需要使用包含2-6&#39; x&#39;
的GREP命令显示所有行
grep -P '^(?:[^x]*x[^x]*){2,6}$' file
还需要知道如何显示连续3个&#39; x&#39;
的所有行
grep -P 'xxx' file
答案 1 :(得分:2)
Bash shell使用Brace Expansion展开:
grep x{2,6} example.txt
成:
grep x2 x6 example.txt
除非你的目录中有一个名为x6
的文件,否则grep
会收到错误,告诉你它无法打开它。
grep
- 尽可能使用单引号。因此,请使用:
grep 'x{2,6}' example.txt
这涉及到grep
获取正则表达式。现在我们需要考虑它的含义。默认情况下,这意味着在一行中查找字符x
,{
,2
,,
,6
,}
。添加-E
选项使用扩展正则表达式,该命令在文件的一行中查找2到6个连续x的任何内容:
grep -E 'x{2,6}' example.txt
然而,值得注意的是,这与选择'xx'
几乎相同,除非您已着色,或者仅选择“{1}}。匹配的文本(GNU grep
扩展名-o
选项)。
这些都适用于2-6个相邻的x,这大致与你提出的正则表达式相同。
你问三个相邻的x:
grep 'xxx' example.txt
单引号不是100%必要的,但它们没有任何危害,并提醒您将它们用于正则表达式。
现在我们面临的困境是你可能意味着&#34;在一条线上2到6 x之间,不一定是相邻的,而不是0或1,也不是7或更多&#34;。
不精确的要求会导致错误或无意的结果。满足该要求需要更复杂的正则表达式:
grep -E '^([^x]*x){2,6}[^x]*$' example.txt
查找2-6次出现零个或多个非x&s,然后在行的开头跟一个x,接着是零或多个非x&直到行的末尾