首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Unix中使用基本的grep命令?

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

Stack Overflow用户
提问于 2014-10-05 21:20:32
回答 2查看 760关注 0票数 0

我需要使用包含2-6‘x的grep命令显示所有行

还需要知道如何用3条连续的x来显示所有行

我已经尝试过grep x{2,6} example.txt,但是我一直收到一个错误,即在目录中找不到x6。我的示例文件包含7行,x的数量在每一行中增加1行。

EN

回答 2

Stack Overflow用户

发布于 2014-10-05 21:33:27

Bash使用支撑展开展开:

代码语言:javascript
复制
grep x{2,6} example.txt

转入:

代码语言:javascript
复制
grep x2 x6 example.txt

除非您的目录中有一个名为x6的文件,否则您将从grep中得到一个错误,告诉您它无法打开它。

  • 规则1:将正则表达式括在引号内的grep中--尽可能地使用单引号。

因此,使用:

代码语言:javascript
复制
grep 'x{2,6}' example.txt

这涉及到对grep的正则表达式。现在我们需要考虑这意味着什么。默认情况下,这意味着在一行中查找字符x{2,6}。添加-E选项使用扩展正则表达式,命令在文件中的一行上查找从2到6个连续x之间的任何内容:

代码语言:javascript
复制
grep -E 'x{2,6}' example.txt

但是,值得注意的是,这与选择'xx'几乎是一样的,除非您有颜色,或者选择“仅”匹配的文本( GNU grep Extension-o选项)。

这些都是2-6相邻的x,这大概就是你建议的正则表达式所想要的。

你问三个相邻的x:

代码语言:javascript
复制
grep 'xxx' example.txt

单引号不是100%必需的,但它们并没有坏处,并提醒您使用它们作为正则表达式。

现在我们面临的困境是,您可能意味着“单行2到6x之间,不一定相邻,而不是0或1,也不是7或更多”。

  • 规则2:精确地描述所需的结果

不精确的要求会导致不正确或无意的结果。满足这一要求需要一个更复杂的指标:

代码语言:javascript
复制
grep -E '^([^x]*x){2,6}[^x]*$' example.txt

它查找2-6次0或更多的非x‘s,然后在行的开头是x,然后是零或更多的非x,直到行的末尾。

票数 3
EN

Stack Overflow用户

发布于 2014-10-05 21:31:36

我需要使用GREP命令显示包含2-6‘x的所有行

代码语言:javascript
复制
grep -P '^(?:[^x]*x[^x]*){2,6}$' file

还需要知道如何用3条连续的x来显示所有行

代码语言:javascript
复制
grep -P 'xxx' file
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26207344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档