我需要使用grep命令显示所有包含2-6'x的行
还需要知道如何显示3个连续“x”的所有行
我已经尝试过grep x{2,6} example.txt,但是我一直收到一个错误,说在目录中找不到x6。我的示例文件包含7行,每行中x的数量增加一行。

最佳答案

bash shell使用Brace Expansion展开:

grep x{2,6} example.txt

进入:
grep x2 x6 example.txt

除非您的目录中有一个名为x6的文件,否则您将从grep收到一个错误,告诉您它无法打开它。
规则1:尽可能将正则表达式括在引号内-单引号。
因此,使用:
grep 'x{2,6}' example.txt

这涉及到让regexgrep。现在我们需要考虑这意味着什么。默认情况下,这意味着在单行上查找字符grepx{2,6}。添加-E选项使用扩展正则表达式,该命令在文件的一行中查找2到6个连续的x:
grep -E 'x{2,6}' example.txt

但是,值得注意的是,这与选择'xx'几乎相同,除非您打开了颜色,或者选择了“仅”匹配的文本(gnugrep扩展名-o选项)。
这些都是2-6个相邻的x,这大致是你所建议的regex想要的。
你问三个相邻的X:
grep 'xxx' example.txt

单引号并不是100%必需的,但它们不会造成伤害,并提醒您在regex中使用它们。
现在我们面临一个两难的境地,你的意思可能是“在一条线上2到6个x之间,不一定相邻,也不一定是0或1,也不一定是7或更多”。
规则2:准确描述你所需的结果
不精确的需求会导致不正确或意外的结果。满足这一要求需要更复杂的regex:
grep -E '^([^x]*x){2,6}[^x]*$' example.txt

这将查找2-6次出现的零个或多个非x,然后是x,最后是零个或多个非x。

关于linux - 如何在Unix中使用基本的grep命令?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26207344/

10-16 13:52