我有以下示例字符串:
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.
我想忽略最后的时期。我从某个地方拿起了上面的命令。
有人可以描述每个关键字代表什么,并为我提供一个正则表达式,它只会为我提供没有句点的价值吗?
sed
,awk
,perl
或任何其他方式对我都没问题。
答案 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