用grep解析字符串

时间:2011-11-14 09:35:04

标签: linux parsing sed grep

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

我有一个字符串:

[INFO] Total time: 2 minutes 8 seconds

并且只想获得

2 minutes 8 seconds

6 个答案:

答案 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

然后阅读sed & awk, Second Edition

答案 2 :(得分:3)

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

sed 's/\[INFO\] Total Time: //'

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

sed 's/^.*: \(.*\)$/\1/'

答案 3 :(得分:0)

使用sedperl

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: