提取复杂的字符串

时间:2014-11-22 17:21:12

标签: linux string bash split

如何从这个字符串中获取一些值?

  

使用函数abs使用问题类型ps在0.0秒内找到总成本为8的路径搜索节点已扩展:183获胜!得分:502平均分:502.0分数:502.0胜率:1/1(1.00)记录:胜利

在此示例中,我需要总成本(8)和扩展节点(183)的值。 (也许在另一个执行中我有47个。)

我尝试了${str:119:1},但有时值会变为10或100而我只会得到一位数。我需要完整的价值。

3 个答案:

答案 0 :(得分:2)

grep可以帮助您

例如

$ grep -oP '(nodes expanded:|total cost of) [0-9]+' inputFile
total cost of 8
nodes expanded: 183

OR

如果你不是字符串那么

$ grep -oP '(nodes expanded:|total cost of) \K[0-9]+' input
8
183

答案 1 :(得分:0)

awk可以将字符串拆分为“单词”并打印出来。例如:

$ awk '{ print $3 }' <<< 'using function abs using [...]'
abs

答案 2 :(得分:0)

提取这些数字:

$ echo "$str" | awk -v RS="" '{print $14,$21}'
8 183

如果要将这些值捕获为方便命名的shell变量:

$ cost=$(echo "$str" | awk -v RS="" '{print $14}')
$ expanded=$(echo "$str" | awk -v RS="" '{print $21}')

表明上述方法有效:

$ echo cost=$cost expanded=$expanded
cost=8 expanded=183