2012-04-27 40 views
10

串我要完成在bash下面的僞代碼相當於(A和B都投入到我的腳本):shell腳本從第一的indexOf子

String a = "some long string"; 
String b = "ri"; 
print (a.substring(a.firstIndexOf(b), a.length()); //prints 'ring' 

我怎麼能在外殼做到這一點腳本?

回答

8

你可以這樣做:

$ a="some long string" 
$ b="ri" 
$ echo $a | grep -o "$b.*" 
ring 
+0

不是指數的字符串本身,如果找不到則彈出錯誤 – 2017-10-19 13:36:42

3

grepsed等可以使用,但它不是純的bash。

expr是一個不錯的選擇,但index參數則不然,因爲它匹配字符而不是整個字符串,嘗試用a = "some wrong string"它匹配的第一個r

而是使用expr match其正則表達式參數:

a="some long string"; 
b="ri"; 
echo ${a:$(expr match "$a" ".*${b}") - $(expr length "$b")} 

它還與a = "some wrong string"

3

試試這個:

a="some long string" 
b="ri" 

echo ${b}${a#*${b}} 
9

嘗試:

$ a="some long string" 
    $ b="ri" 

    $ echo ${a/*$b/$b} 
    ring 

    $ echo ${a/$b*/$b} 
    some long stri 
+0

聰明。不過,你應該將參數加雙引號給'echo'。 – tripleee 2017-12-31 20:22:57