我需要一些帮助来解析Linux中的字符串。
我有一个字符串:
[INFO] Total time: 2 minutes 8 seconds
并且只想获得
2 minutes 8 seconds
答案 0 :(得分:7)
sed和perl选项确实有效,但在这个简单的情况下,我更喜欢
echo "[INFO] Total time: 2 minutes 8 seconds" | cut -d: -f2
如果你有空格,你可以使用
echo "[INFO] Total time: 2 minutes 8 seconds" | cut -d: -f2 | xargs
甚至......
echo "[INFO] Total time: 2 minutes 8 seconds" | cut -d: -f2 | cut -c2-
PS。琐事:只有当grep实现了像grep
这样的正面观察时,才可以使用egrep -o '(?<=: ).*'
执行此操作;不幸的是POSIX扩展正则表达式和GNU扩展正则表达式都没有实现lookbehind(http://www.regular-expressions.info/refflavors.html)
答案 1 :(得分:4)
使用grep
:
$ echo '[INFO] Total time: 2 minutes 8 seconds' | grep -o '[[:digit:]].*$'
2 minutes 8 seconds
或sed
:
$ echo '[INFO] Total time: 2 minutes 8 seconds' | sed 's/.*: //'
2 minutes 8 seconds
或awk
:
$ echo '[INFO] Total time: 2 minutes 8 seconds' | awk -F': ' '{print $2}'
2 minutes 8 seconds
或cut
:
$ echo '[INFO] Total time: 2 minutes 8 seconds' | cut -d: -f2
2 minutes 8 seconds
答案 2 :(得分:3)
如果行前缀始终相同,只需使用sed并用空字符串替换前缀:
sed 's/\[INFO\] Total Time: //'
假设时间总是冒号后一行中的最后一个,请使用以下正则表达式(用冒号后的所有内容替换每一行):
sed 's/^.*: \(.*\)$/\1/'
答案 3 :(得分:0)
使用sed
或perl
:
echo "[INFO] Total time: 2 minutes 8 seconds" | sed -e 's/^\[INFO\] Total time:\s*//'
echo "[INFO] Total time: 2 minutes 8 seconds" | perl -pe "s/^\[INFO\] Total time:\s*//;"
答案 4 :(得分:0)
如果您更喜欢AWK,那么它非常简单
echo "[INFO] Total time: 2 minutes 8 seconds" | awk -F": " '{ print $2 }'
答案 5 :(得分:0)
如果您从终端获取信息,那么您可以查看信息并使用带分隔符的cut来删除所需信息之前的所有信息。 grep INFO | cut -f2 -d:
如果您想从文件中获取信息,那么您可以grep该文件 grep INFO somefilename | cut -f2 -d: