web-dev-qa-db-ja.com

部分文字列の最初のインデックスからのシェルスクリプト部分文字列

Bashで次の擬似コードに相当するものを実現したいと思います(aとbの両方がスクリプトへの入力です)。

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

シェルスクリプトでこれを行うにはどうすればよいですか?

16
pathikrit

できるよ:

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

試してください:

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

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

    $ echo ${a/$b*/$b}
    some long stri
14
Josshad

grepsedなどを使用できますが、pure-bashではありません。

exprは良い選択ですが、indexパラメータはそうではありません。文字列全体ではなく文字と一致するため、最初のrと一致するa = "some wrong string"で試してください。

代わりに、正規表現パラメーターを指定してexpr matchを使用します。

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

a = "some wrong string"でも機能します

3
lessyv

これを試して:

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

echo  ${b}${a#*${b}}
3
Fritz G. Mehner