2012-04-27 14 views
10

che voglio realizzare l'equivalente del seguente pseudo-codice in bash (sia A che B sono ingressi per il mio script):Shell script di sottostringa dalla prima stringa indexOf

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

Come posso fare questo in guscio sceneggiatura?

risposta

8

si può fare:

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

indice di ma la stringa stessa e si apre l'errore se non si trova –

3

grep, sed e così via può essere utilizzato, ma non è puro-bash.

expr è una buona scelta, ma index parametro non è, perché corrisponde personaggio non l'intera stringa, provare con a = "some wrong string" esso corrisponde al primo r.

Invece utilizzare expr match con il suo parametro di espressione regolare:

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

Funziona anche con a = "some wrong string"

3

Prova questo:

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

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

Prova:

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

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

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

intelligente. Dovresti comunque citare due volte l'argomento su echo'. – tripleee

Problemi correlati