Позиция строки в строке с помощью оболочки Linux script? Если у меня есть текст в переменной оболочки, скажем $a: a="The cat sat on the mat" Как я могу искать "cat" и возвращать 4 с помощью оболочки Linux script или -1, если не найден? Ответ 1 С bash 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 Ответ 2 Вы можете использовать grep для получения байтового смещения соответствующей части строки: echo $str | grep -b -o str В соответствии с вашим примером: [[email protected] ~]$ 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}' Ответ 3 Я использовал awk для этого a="The cat sat on the mat" test="cat" awk -v a="$a" -v b="$test" 'BEGIN{print index(a,b)}' Ответ 4 echo $a | grep -bo cat | sed 's/:.*$//'
Ответ 1 С bash 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
Ответ 2 Вы можете использовать grep для получения байтового смещения соответствующей части строки: echo $str | grep -b -o str В соответствии с вашим примером: [[email protected] ~]$ 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}'
Ответ 3 Я использовал awk для этого a="The cat sat on the mat" test="cat" awk -v a="$a" -v b="$test" 'BEGIN{print index(a,b)}'