匹配模式后grep但排除句点
grep after matching pattern but exclude period
我有以下示例字符串:
Program exiting with code: 0.
Program exiting with code: 1.
Program exiting with code: 10.
我希望 grep 在匹配模式 "Program exiting with code:" 之后得到 return 个值。但是我最后不需要句号。我试过:
grep "Program exiting with exit code:" dataload.log | sed 's/^.*.: //'
上面的命令returns:
0.
1.
10.
我想忽略末尾的句号。我从某处获取了上述命令。
有人可以描述每个关键字代表什么,并为我提供一个只提供没有句号的值的正则表达式吗?
sed
、awk
、perl
或任何其他方式都适合我。
sed 's/^.*.: //'
首先,这是一个替换正则表达式,如开头的 s
所示。第一个 / /
中的部分是要匹配的内容,第二个 / /
中的部分是要替换的内容。
表达式的第一(匹配)部分的字符都是特殊的正则表达式字符。
可在此处找到完整的含义列表:http://www.rexegg.com/regex-quickstart.html
匹配的意思是:
^
- 在行首
.
- 匹配任何字符
*
- 任意次数
.
- 匹配任何字符
:
- 匹配冒号
</code>-匹配一个space</p>
<p>然后就什么都没有了。这就是为什么要保留末尾的句点,因为它删除了 <code>Program exiting with code:
之前的所有内容,剩下 1.
值得尝试使用交互式工具来测试字符串上的不同正则表达式,例如http://www.regexr.com/
你可能只 substitute/remove 你的情况下所有不是数字的东西:'s/[^0-9]//g'
.
只需使用 grep 进行回顾并仅捕获数字:
$ grep -Po '(?<=Program exiting with code: )\d*' file
0
1
10
如果您使用 cut
命令扩展它,您的解决方案就很好:
grep "Program exiting with code:" dataload.log | sed 's/^.*.: //' | cut -d"." -f1
这是另一种方式:
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
最后的数字。
我有以下示例字符串:
Program exiting with code: 0.
Program exiting with code: 1.
Program exiting with code: 10.
我希望 grep 在匹配模式 "Program exiting with code:" 之后得到 return 个值。但是我最后不需要句号。我试过:
grep "Program exiting with exit code:" dataload.log | sed 's/^.*.: //'
上面的命令returns:
0.
1.
10.
我想忽略末尾的句号。我从某处获取了上述命令。
有人可以描述每个关键字代表什么,并为我提供一个只提供没有句号的值的正则表达式吗?
sed
、awk
、perl
或任何其他方式都适合我。
sed 's/^.*.: //'
首先,这是一个替换正则表达式,如开头的 s
所示。第一个 / /
中的部分是要匹配的内容,第二个 / /
中的部分是要替换的内容。
表达式的第一(匹配)部分的字符都是特殊的正则表达式字符。
可在此处找到完整的含义列表:http://www.rexegg.com/regex-quickstart.html
匹配的意思是:
^
- 在行首
.
- 匹配任何字符
*
- 任意次数
.
- 匹配任何字符
:
- 匹配冒号
</code>-匹配一个space</p>
<p>然后就什么都没有了。这就是为什么要保留末尾的句点,因为它删除了 <code>Program exiting with code:
之前的所有内容,剩下 1.
值得尝试使用交互式工具来测试字符串上的不同正则表达式,例如http://www.regexr.com/
你可能只 substitute/remove 你的情况下所有不是数字的东西:'s/[^0-9]//g'
.
只需使用 grep 进行回顾并仅捕获数字:
$ grep -Po '(?<=Program exiting with code: )\d*' file
0
1
10
如果您使用 cut
命令扩展它,您的解决方案就很好:
grep "Program exiting with code:" dataload.log | sed 's/^.*.: //' | cut -d"." -f1
这是另一种方式:
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
最后的数字。