在bash中将子字符串解析为shell变量

时间:2017-03-08 18:04:41

标签: bash shell

我们收到了以下信息:

[18:51:10] [Server thread/INFO]: Tester121 entered area ~ Wilderness - (PvP) ~

我们想解释输入并定义不同的变量。

[$time] [Server thread/INFO]: $player entered area ~ $area - (PvP) ~

结果应为:

time="18:51:10"
player="Tester121"
area="Wilderness"

我是stackoverflow的新手,随时发表评论,以便我可以提高我的技能提问方式。

1 个答案:

答案 0 :(得分:0)

=~中的[[ ]]运算符评估POSIX ERE格式的正则表达式,并将结果匹配组分配给数组BASH_REMATCH

re='^\[([[:digit:]:]+)\] \[Server thread/INFO\]: ([^[:space:]]+) entered area ~ ([^[:space:]]+) - [(]PvP[)] ~'
line='[18:51:10] [Server thread/INFO]: Tester121 entered area ~ Wilderness - (PvP) ~'

if [[ $line =~ $re ]]; then
  time=${BASH_REMATCH[1]}
  player=${BASH_REMATCH[2]}
  area=${BASH_REMATCH[3]}
fi