基本上,我在Unix中编写一个shell脚本,我需要检索一个值,该值说明一个单词出现在句子/字符串中的位置,然后将该值存储在变量中。
例如,单词“blue”是下一句“快速蓝色汽车”中的第三个单词。因此,我希望这个单词的值为3并将其存储在名为$ blue的变量中。即echo $ blue将打印出数字3。
到目前为止,我发现的所有例子都是用字符而不是单词打印出单词的位置。
答案 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