如何在Unix中使用基本的grep命令?

时间:2014-10-05 21:20:32

标签: linux unix grep

我需要使用包含2-6'x的<{1}}命令显示所有行

还需要知道如何显示连续3个'x'的所有行

我已经尝试了grep,但我一直收到一条错误消息,指出在目录中找不到grep x{2,6} example.txt。我的示例文件包含7行,每行中'x'的数量增加一行。

2 个答案:

答案 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会收到错误,告诉你它无法打开它。

  • 规则1:将正则表达式括在引号内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;。

  • 规则2:准确描述您所需的结果

不精确的要求会导致错误或无意的结果。满足该要求需要更复杂的正则表达式:

grep -E '^([^x]*x){2,6}[^x]*$' example.txt

查找2-6次出现零个或多个非x&s,然后在行的开头跟一个x,接着是零或多个非x&直到行的末尾