使用shell脚本,如何在文本中查找数字行
我在试着找出与模式x.y或x.y.z相匹配的线条,其中x,y和z是数字 例如,给定以下行:使用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
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 | thing2
\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表示法,可能在GNUgrep
中可用(特别是如果您使用-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或BSDgrep
中就是这个意思),它似乎并没有提供问题的答案。如果你解释一下它应该做什么会有帮助的。