我想得到分隔符索引解释如下。
t="name,address,gender,phone"
分隔符将是逗号,我想在字符串中搜索地址,它可以返回 2。
答案1
解决方案1
使用时bash
您应该将字符串分配"name,address,gender,phone"
给一个数组。您还必须创建一个函数来获取任何字符串的索引。
将字符串分配给数组:
readarray -t array <<< "$(tr ',' $'\n' <<< 'name,address,gender,phone')"
获取索引的函数:
getIndexOf () {
local index
index=-1
for (( i = 0; i < "${#array[@]}"; i++ )); do
if [[ $1 = ${array[$i]} ]];then
index=$[ i + 1]
break
fi
done
echo $index
}
您必须小心数组变量名称。在函数 getIndexOf 中,数组变量被称为“array”,因此当您使用“read -r -a array”时,该变量也必须被称为“array”。
getIndexOf函数的使用:
如果您想获取索引,address
则应使用以下命令:
getIndexOf address
#Output:
2
如果您指定一个不存在的值,那么您将得到-1
:
getIndexOf fuzz
#Output:
-1
笔记:此功能仅适用于独特的项目。因此,如果您有数组:
"name,address,gender,phone,name"
,如您所见,您有两次name
。因此,在这种情况下,该函数将返回第一个项目索引:1
。
解决方案2
您可以用来grep -n
获取某些项目的索引。首先,如上面的代码所示,您应该将字符串分配给一个数组:
readarray -t array <<< "$(tr ',' $'\n' <<< 'name,address,gender,phone,Some name,phone' )"
现在使用printf
andgrep -n
我将获得任何值的索引:
获取“名称”索引:
printf "%s\n" "${array[@]}" | grep -n "^name$"
#Output
1:name
获取“某个名字”索引:
printf "%s\n" "${array[@]}" | grep -n "^Some name$"
#Output:
5:Some name
获取“电话”索引:
printf "%s\n" "${array[@]}" | grep -n "^phone$"
#Output
4:phone
6:phone
如果您只想获取索引而不是匹配的字符串(4:电话),您应该cut -d : -f1
在管道末尾使用:
printf "%s\n" "${array[@]}" | grep -n "^phone$" | cut -d : -f1
#Output
4
6
笔记:
- 如果您搜索不存在的字符串,您将不会得到
-1
.相反,您将不会得到任何输出。 - 确保您搜索的每个单词都
grep
包含^
在字符串的开头和$
结尾:"^word to search$"