匹配模式后的grep但不包括句点

时间:2015-12-23 10:43:40

标签: sed grep matching

我有以下示例字符串:

Program exiting with code: 0.
Program exiting with code: 1.
Program exiting with code: 10.

我希望grep在匹配模式后返回值"程序退出代码:"。但是我最后不需要这段时间。我试过了:

grep "Program exiting with exit code:" dataload.log | sed 's/^.*.: //'

以上命令返回:

0.
1.
10.

我想忽略最后的时期。我从某个地方拿起了上面的命令。

有人可以描述每个关键字代表什么,并为我提供一个正则表达式,它只会为我提供没有句点的价值吗?

sedawkperl或任何其他方式对我都没问题。

4 个答案:

答案 0 :(得分:2)

只需使用带有后视的grep并仅捕捉数字:

$ grep -Po '(?<=Program exiting with code: )\d*' file
0
1
10

答案 1 :(得分:0)

sed 's/^.*.: //'

首先,这是一个替换正则表达式,由开头的s表示。第一个/ /中的部分是匹配的部分,第二个/ /是替换它的部分。

表达式的第一个(匹配)部分中的字符都是特殊的正则表达式字符。

可在此处找到其完整列表:http://www.rexegg.com/regex-quickstart.html

匹配意味着:

^ - 在行的开头

. - 匹配任何字符

* - 任意次数

. - 匹配任何字符

: - 匹配冒号

- 匹配空格

然后这一切都没有被替换。这就是为什么保留最后的句号,因为它会删除Program exiting with code:之前的所有内容,这会留下1.

值得玩一个交互式工具来测试字符串上的不同正则表达式,例如: http://www.regexr.com/

您可以在您的案例中替换/删除非数字的所有内容:'s/[^0-9]//g'

答案 2 :(得分:0)

这是另一种方式:

grep -oE 'Program exiting with code:\s*[0-9]+' dataload.log |grep -oE '[0-9]+$'

第一个grep命令的输出是:

Program exiting with code: 0
Program exiting with code: 1
Program exiting with code: 10

然后你只需要grep最后的数字。

答案 3 :(得分:-1)

如果使用<div> click me </div>命令扩展它,您的解决方案就可以了:

cut