2012-03-25 18 views
11

sto cercando di rimuovere stringa di variabili utilizzando sed come questo:Rimozione sottostringa di stringa utilizzando sed

PRINT_THIS="`echo "$fullpath" | sed 's/${rootpath}//' -`" 

dove

fullpath="/media/some path/dir/helloworld/src" 
rootpath=/media/some path/dir 

voglio eco solo resto del fullpath come questo (Sto usando questo su un sacco di directory, quindi ho bisogno di memorizzarlo in variabili e farlo automaticamente

echo "helloworld/src" 

usi variabile ng sarebbe

echo "Directory: $PRINT_THIS" 

Il problema è che non riesco a sed per rimuovere la stringa, quello che sto facendo di sbagliato? Grazie

risposta

25

Non è necessario sed per questo, bash da solo è sufficiente:

$ fullpath="/media/some path/dir/helloworld/src" 
$ rootpath="/media/some path/dir" 
$ echo ${fullpath#${rootpath}} 
/helloworld/src 
$ echo ${fullpath#${rootpath}/} 
helloworld/src 
$ rootpath=unrelated 
$ echo ${fullpath#${rootpath}/} 
/media/some path/dir/helloworld/src 

Controllare la documentazione String manipulation.

+0

Grazie, è divertente perché ho usato la manipolazione delle stringhe altrove nella sceneggiatura ma me ne sono dimenticato – rluks

+1

Se non sai se $ rootpath termina con una barra, puoi fare: 'shopt -s extglob; echo "$ {fullpath ## $ rootdir * (/)}" ' –

+0

Impossibile utilizzarlo per il mio esempio, ho' one = "branch_name_something" 'e' two = "branch_name_" '. Voglio stampare solo "qualcosa" "da $ one, quindi ho provato' echo $ {# $ {two} one} 'ma getta' -bash: $ {# $ {two} one}: sostituzione errata'. Non so cosa mi manca –

8

Per usare le variabili in sed, è necessario utilizzare in questo modo:

sed "[email protected][email protected]@g" FILE 

due cose:

  • Io uso le virgolette doppie (guscio non si espandono le variabili in apici)
  • io uso un altro separatore che non sia in conflitto con le barre nei tuoi sentieri

Es:

$ rootpath="/media/some path/dir" 
$ fullpath="/media/some path/dir/helloworld/src" 
$ echo "$fullpath" 
/media/some path/dir/helloworld/src 
$ echo "$fullpath" | sed "[email protected][email protected]@" 
/helloworld/src 
+0

Sì, grazie! Ed è così semplice – gontard

Problemi correlati