2013-07-12 3 views
3

Есть ли способ найти позицию первого символа в строке в Bash под Mac OS X?Bash: Найти положение символа в строке под OS X

Что-то вроде:

stringZ=abcABC123ABCabc      # 6 
echo `expr index "$stringZ" C12`    # C position. 

, как мы проделали в Advanced Bash-Scripting Guide

Пара подводных камней:

  1. Официальный индекс функция expr index $string $substring не присутствует в OS X (BSD) матч
  2. Установка гну матча (gmatch), кажется, не быть портативное решение в области систем BSD

Любые идеи?

+0

не имеют OS X, чтобы проверить, но будет 'Эхо $ stringZ | Grep C12 -o -b' сделать трюк ? –

+0

$ echo "ASDfsfssdf" | grep D -o -b 0: D –

+0

Можете ли вы попробовать без -o? В моей версии bash, в Linux, поведение -b изменяется на -o, но из того, что я вижу в man-странице Mac OS X, может работать grep C12 -b'. –

ответ

5

Это ужасный взлом и может не работать для всех случаев.

tmp=${stringZ%%C12*}  # Remove the search string and everything after it 
echo $((${#tmp} + 1)) # Add one to the length of the remaining prefix 
+2

Я просто собирался предложить то же самое. '%%' должно найти первое вхождение. – choroba

+0

'%%' удаляет самое длинное событие; оба начнутся с первого появления. – chepner

+0

Двойной процент кажется пустым. Например. попробуйте это: 'stringZ =" AB = C = D = F " tmp = $ {stringZ %% = *} # Удалить строку поиска и все после нее echo $ (($ {# tmp} + 1)) # Добавьте один к длине оставшегося префикса –

2

Может быть излишним, но как об этом:

$ echo 'abcABC123ABCabc' | awk 'match($0,"C"){print RSTART}' 
6 
+0

Не совсем bash-решение, но все-таки оно работает. Благодаря! –

Смежные вопросы