如何在bash中的字符串中找到单词的索引?

GJ.*_*GJ. 10 linux search bash

在 bash 脚本中,

我有一个字符串,其中包含由一个或多个空格分隔的多个单词。IE:

Name   Age Sex  ID         Address
Run Code Online (Sandbox Code Playgroud)

如果我想找到任何一个词,比如我想找到“年龄”这个词的索引,我该怎么做?

有什么命令可以直接返回我想要的单词的索引号吗?

谢谢。

kop*_*hke 13

Bash自己在字符串中执行分——事实上,通常情况下,避免这是一个问题,而引用的原因是如此重要。在您的情况下很容易利用它:只需将您的字符串放入一个数组中而不引用它 - bash 将使用分词来分隔各个元素。假设您的字符串存储在变量中$str

ar=($str) # no quotes!
Run Code Online (Sandbox Code Playgroud)

将返回一个包含 5 个元素的数组。您的数组索引是您的单词索引(从 0 开始计数,就像在大多数脚本和编程语言中一样),即使用“年龄”访问

${ar[1]}  # 0 => Name, 1 => Age, 2 => Sex, 3 => ID, 4 => Address
Run Code Online (Sandbox Code Playgroud)

或者,如果您需要按内容查找元素索引,请遍历数组,即

function el_index {
    cnt=0; for el in "${ar[@]}"; do
        [[ $el == "$1" ]] && echo $cnt && break
        ((++cnt))
    done
}
el_index "Age" # => 1
Run Code Online (Sandbox Code Playgroud)


小智 5

$ export FOO="Name   Age Sex  ID         Address"
Run Code Online (Sandbox Code Playgroud)

将 *Age 替换为 Age——这将删除“Age”之前的所有内容:

$ echo ${FOO/*Age/Age}
Age Sex ID Address
Run Code Online (Sandbox Code Playgroud)

在“年龄”之前获取任何东西

$ echo ${FOO/Age*/}
Name
Run Code Online (Sandbox Code Playgroud)

获取该字符串的长度(即“Age”的索引):

$ BEGIN=${FOO/Age*/}
$ echo ${#BEGIN}
7
Run Code Online (Sandbox Code Playgroud)