Положение строки в строке с использованием сценария оболочки Linux? - PullRequest
37 голосов
/ 17 февраля 2011

Если у меня есть текст в переменной оболочки, скажем $a:

a="The cat sat on the mat"

Как мне найти «cat» и вернуть 4, используя скрипт оболочки Linux, или -1, если не найден

Ответы [ 4 ]

62 голосов
/ 17 февраля 2011

с баш

a="The cat sat on the mat"
b=cat
strindex() { 
  x="${1%%$2*}"
  [[ "$x" = "$1" ]] && echo -1 || echo "${#x}"
}
strindex "$a" "$b"   # prints 4
strindex "$a" foo    # prints -1
25 голосов
/ 17 февраля 2011

Вы можете использовать grep для получения байтового смещения соответствующей части строки:

echo $str | grep -b -o str

Согласно вашему примеру:

[user@host ~]$ echo "The cat sat on the mat" | grep -b -o cat
4:cat

Вы можете передать это в awk, если хотите просто первую часть

echo $str | grep -b -o str | awk 'BEGIN {FS=":"}{print $1}'
6 голосов
/ 17 февраля 2011

Я использовал awk для этого

a="The cat sat on the mat"
test="cat"
awk -v a="$a" -v b="$test" 'BEGIN{print index(a,b)}'
5 голосов
/ 17 февраля 2011
echo $a | grep -bo cat | sed 's/:.*$//'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...