如何找到单词在字符串中的哪个位置?

时间:2018-10-15 16:46:21

标签: linux shell unix gnu

例如,如果我有变量

var="dog cat owl fish"

我想输入“ cat”(用空格分隔的字符串中的第二个单词)并返回“ 2”,我该如何在不使用bash的shell脚本中执行此操作?

5 个答案:

答案 0 :(得分:3)

“没有bash”是什么意思?

以下内容适用于bash,dash和ksh:

#!/bin/____  <- insert your shell here

input=$1
var="dog cat owl fish"

i=1
set -f
for word in $var ; do
    if [ "$word" = "$input" ] ; then
        echo $i
    fi
    i=$((i+1))
done

set -f阻止*中的$var进行路径名扩展。在zsh中,您需要set -o SH_WORD_SPLIT 1在for循环中拆分$var

答案 1 :(得分:0)

使用一些核心实用程序:

echo "$var" | tr " " "\n" | grep -n "$input" | cut -d: -f1

答案 2 :(得分:0)

此信息来自先前的post。我只是对其进行了更改,希望能够解决您的问题。

{!join from=Type to=Type fromIndex=core2)(UserId:<VALUE> AND Access:<VALUE>)
{!join from=Id to=Id fromIndex=core2)(UserId:<VALUE> AND Access:<VALUE>)

{!join from=Type to=Type fromIndex=core2)UserId:<VALUE>
{!join from=Id to=Id fromIndex=core2)UserId:<VALUE>
{!join from=Type to=Type fromIndex=core2)Access:<VALUE>
{!join from=Id to=Id fromIndex=core2)Access:<VALUE>

答案 3 :(得分:0)

由于您在评论中提到了awk:

$ echo $var | awk -v s=cat '{for(i=1;i<=NF;i++)if($i=="cat")print i}'
2

解释:

echo $var |            # echo $var to awk
awk -v s=cat '{        # parameterized search word
    for(i=1;i<=NF;i++) # iterate every word
        if($i==s)      # if current word is the searched one
            print i    # print its position
}'

如果var中有换行符(提到了sh):

$ var="dog cat\nowl fish"                
$ echo $var
dog cat
owl fish
$ echo $var | awk -v RS="^$" -v s=owl '{for(i=1;i<=NF;i++)if($i==s)print i}'
3

答案 4 :(得分:0)

animals="dog cat owl fish"
tokens=( $animals )
echo ${tokens[1]}