2013-07-12 42 views
3

串字符的位置有没有办法找到下的Mac OS X猛砸字符串中的第一个字符的位置?击:查找在OS X

是这样的:

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

如desribed在Advanced Bash-Scripting Guide

夫妇陷阱的:

  1. 官方指数功能expr index $string $substring不 存在于OS X(BSD)匹配
  2. 安装GNU比赛(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更改,但从我看到的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解决方案,但它仍然有效。谢谢! –