使用shell脚本,如何在文本中查找数字行

使用shell脚本,如何在文本中查找数字行,shell,Shell,我在试着找出与模式x.y或x.y.z相匹配的线条,其中x,y和z是数字 例如,给定以下行: 1.0/ 2.2.5rc1/ 2.3.0/ 2.3.1/ abc-1.0.0/ 结果应该是: 1.0 2.3.0 2.3.1 我该怎么做?你可以 grep -C 2 yourSearch yourFile 要以文件形式发送,请执行以下操作: grep -C 2 yourSearch yourFile > result.txt 希望有帮助 需要知道的事情: 使用-E在扩展模式下调用g

我在试着找出与模式x.y或x.y.z相匹配的线条,其中x,y和z是数字

例如,给定以下行:

1.0/
2.2.5rc1/
2.3.0/
2.3.1/
abc-1.0.0/
结果应该是:

1.0  
2.3.0  
2.3.1
我该怎么做?

你可以

grep -C 2 yourSearch yourFile 
要以文件形式发送,请执行以下操作:

grep -C 2 yourSearch yourFile > result.txt
希望有帮助

需要知道的事情:

  • 使用
    -E
    在扩展模式下调用
    grep
  • ^
    开始模式,表示希望从第一个字符开始搜索
  • 要搜索数字,请使用
    \d
  • 要搜索点,请使用
    \。
  • 要搜索thing1或thing1,请使用
    thing1 | thing2
  • 注意:正如Jonathan Leffler在下面指出的,
    \d
    是一种符号,可能无法在所有版本的grep中使用。尝试
    [0-9]
    [:digit:][]
    以符合grep的POSIX标准实现

    知道了这一点,我们就这样把它放在一起:


    grep-E“^(\d.\d.\d.\d.\d)/”您的文件

    您的示例没有什么意义。我可以看到
    2.3.0
    2.3.1
    匹配
    x.y
    x.y.z
    ,但给定
    x=2;y=3
    1.0
    如何与
    x.y
    匹配?请详细说明或澄清;-)祝你好运。谢尔特,你的建议是对的。我只是不知道如何描述它。但是,我想要的结果是:1.0 2.3.0 2.3.1将
    grep--version
    的输出添加到上面的问题中。祝你好运david@workstation~$GRIP-版本GRIP(GNU-GRIP)2.16版权(C)2014免费软件基金会,公司许可证GPLV3+:GNU GPL版本3或更高版本。这是自由软件:您可以自由更改和重新发布它。在法律允许的范围内,不存在任何担保。由Mike Haertel和其他人撰写,请参见。david@workstation:~$@z5h你的解决方案似乎不错。我试过你的建议,但没有结果。。谢谢@planetradio:
    \d
    是一种Perl-ish表示法,可能在GNU
    grep
    中可用(特别是如果您使用
    -P
    而不是
    -E
    );它可能在您的
    grep
    版本中可用,也可能不可用。尝试将每个
    \d
    替换为
    [0-9]
    (或者,如果您不介意过于冗长的话,
    [:digit:]
    )。这将在POSIX标准版本的
    grep
    .grep-P“^(\d.\d |\d.\d.\d)/”文件中正常工作。另一方面,grep-P“^([[:digit:][]+.[:digit:][]+|[:digit:][]+.[:digit:][]+.[:digit:][]+])/”您的文件也正常。现在,它起作用了!谢谢大家!当做假设
    grep-c2
    应该在匹配前后给出两行上下文(这在macosx或BSD
    grep
    中就是这个意思),它似乎并没有提供问题的答案。如果你解释一下它应该做什么会有帮助的。