用grep解析字符串

Rom*_*hin -2 linux grep parsing sed

我需要一些帮助来解析Linux中的字符串.

我有一个字符串:

[INFO] Total time: 2 minutes 8 seconds
Run Code Online (Sandbox Code Playgroud)

并且只想获得

2 minutes 8 seconds
Run Code Online (Sandbox Code Playgroud)

seh*_*ehe 7

sed和perl选项确实有效,但在这个简单的情况下,我更喜欢

 echo "[INFO] Total time: 2 minutes 8 seconds" | cut -d: -f2
Run Code Online (Sandbox Code Playgroud)

如果你有空间的东西,你可以使用

 echo "[INFO] Total time: 2 minutes 8 seconds" | cut -d: -f2 | xargs
Run Code Online (Sandbox Code Playgroud)

甚至...

 echo "[INFO] Total time: 2 minutes 8 seconds" | cut -d: -f2 | cut -c2-
Run Code Online (Sandbox Code Playgroud)

PS.琐事:你可以这样做,grep只有当grep实现了这样的正面看法egrep -o '(?<=: ).*'; 不幸的是POSIX扩展正则表达式和GNU扩展正则表达式都没有实现lookbehind(http://www.regular-expressions.info/refflavors.html)


Joh*_*web 7

使用grep

$ echo '[INFO] Total time: 2 minutes 8 seconds' | grep -o '[[:digit:]].*$'
2 minutes 8 seconds
Run Code Online (Sandbox Code Playgroud)

或者sed

$ echo '[INFO] Total time: 2 minutes 8 seconds' | sed 's/.*: //'
2 minutes 8 seconds
Run Code Online (Sandbox Code Playgroud)

或者awk

$ echo '[INFO] Total time: 2 minutes 8 seconds' | awk -F': ' '{print $2}'
2 minutes 8 seconds
Run Code Online (Sandbox Code Playgroud)

或者cut

$ echo '[INFO] Total time: 2 minutes 8 seconds' | cut -d: -f2
 2 minutes 8 seconds
Run Code Online (Sandbox Code Playgroud)

然后阅读sed & awk, Second Edition


kni*_*ttl 5

如果行前缀始终相同,只需使用 sed 并将前缀替换为空字符串:

sed 's/\[INFO\] Total Time: //'
Run Code Online (Sandbox Code Playgroud)

假设时间始终是一行中冒号之后的最后一个内容,请使用以下正则表达式(将每行替换为冒号之后的所有内容):

sed 's/^.*: \(.*\)$/\1/'
Run Code Online (Sandbox Code Playgroud)