Unix - 如何找到一个单词出现在句子中的位置

时间:2017-07-10 12:19:18

标签: bash shell unix sh

基本上,我在Unix中编写一个shell脚本,我需要检索一个值,该值说明一个单词出现在句子/字符串中的位置,然后将该值存储在变量中。

例如,单词“blue”是下一句“快速蓝色汽车”中的第三个单词。因此,我希望这个单词的值为3并将其存储在名为$ blue的变量中。即echo $ blue将打印出数字3。

到目前为止,我发现的所有例子都是用字符而不是单词打印出单词的位置。

2 个答案:

答案 0 :(得分:4)

也许是这样的?

text="The quick brown fox jumps over the lazy dog."
tokens=$(echo $text | sed 's/[.\\\/;,?!:]//g') # Add any missing punctuation marks here
$pos = 0
for token in $tokens
do
    pos=$(($pos + 1))
    if [[ "$token" == "fox" ]]
    then
        echo $pos
    fi
done

这将打印出单词" fox"的位置。 (在这种情况下为4)到命令行。多次出现该单词将产生多个输出。

答案 1 :(得分:1)

这是另一个在awk中。借用@ SebastianLenartowicz' s $text

$ text="the quick brown fox jumps over the lazy dog"  # in lower and no punctuations

$ echo $text | awk -v RS="[ \n]" -v s=fox '$0==s{print NR}'
4

说明:

  • -v RS="[ \n]" R ecord S eparator to space或newline
  • -v s=fox搜索字转到变量s
  • 中的脚本
  • $0==s{print NR}如果记录($0)等于s打印行或记录NR