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)
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)
使用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。
如果行前缀始终相同,只需使用 sed 并将前缀替换为空字符串:
sed 's/\[INFO\] Total Time: //'
Run Code Online (Sandbox Code Playgroud)
假设时间始终是一行中冒号之后的最后一个内容,请使用以下正则表达式(将每行替换为冒号之后的所有内容):
sed 's/^.*: \(.*\)$/\1/'
Run Code Online (Sandbox Code Playgroud)