我想在字符串中得到一个特定的单词,所以我的代码是这样的:
#!/bin/env bash
str="ovsdb-server is running with pid 28663 ovs-vswitchdm is running with pid 29121 ovs-vswitchd is running with pid 28679"
str2=$(echo $str)
res=${str2##ovs-vswitchd}
echo $res
pos=$(expr index "$str" "ovs-vswitchd")
echo $pos
但结果是:
ovsdb-server is running with pid 28663 ovs-vswitchdm is running with pid 29121 ovs-vswitchd is running with pid 28679
1
我不知道为什么。在我看来,我想得到“正在运行pid 28679 ”,然后得到 28679 ,但我不知道为什么对字符串的操作不起作用,请帮帮我......
答案 0 :(得分:0)
代码大部分是正确的,除了几位:
删除最长的匹配前缀模式 ##
需要*
以匹配$str2
中字符串前的字符" OVS-vswitchd "
变化:
res=${str2##ovs-vswitchd}
到
res=${str2##*ovs-vswitchd}
。
expr index
返回的数字不会超过字符串的长度,也不会返回子字符串。
变化:
pos=$(expr index "$str" "ovs-vswitchd")
到
pos=${res##*pid }
。
输出:
is running with pid 28679
28679