获取分隔符索引

获取分隔符索引

我想得到分隔符索引解释如下。

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'  )"

现在使用printfandgrep -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. 如果您搜索不存在的字符串,您将不会得到-1.相反,您将不会得到任何输出。
  2. 确保您搜索的每个单词都grep包含^在字符串的开头和$结尾:"^word to search$"

相关内容