Ответ 1
Вы можете сделать:
$ a="some long string"
$ b="ri"
$ echo $a | grep -o "$b.*"
ring
Я хочу выполнить эквивалент следующего псевдокода в bash (оба a и b являются входами в мой script):
String a = "some long string";
String b = "ri";
print (a.substring(a.firstIndexOf(b), a.length()); //prints 'ring'
Как это сделать в оболочке script?
Вы можете сделать:
$ a="some long string"
$ b="ri"
$ echo $a | grep -o "$b.*"
ring
Try:
$ a="some long string"
$ b="ri"
$ echo ${a/*$b/$b}
ring
$ echo ${a/$b*/$b}
some long stri
grep
, sed
и т.д., но он не является чистым - 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"
Попробуйте следующее:
a="some long string"
b="ri"
echo ${b}${a#*${b}}