2012-03-25 21 views
11

Ben değişkenin dışında alt dizeyi kaldırmak için çalışıyorum böyle sed kullanarak sed kullanarak:Çıkarma alt dize

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

böyle FullPath sadece dinlenme yankı istiyorum

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

(Bu dizinin tamamını bir grupta kullanıyorum, bu yüzden değişkenler halinde depolamalıyım ve bunu otomatik olarak yapmalıyım ng değişken o

echo "Directory: $PRINT_THIS" 

Sorun, ben alt dizeyi kaldırmak için sed alamayan olduğunu olurdu, ben yanlış yapıyorum?

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

iki şey: Teşekkür

cevap

25

yalnız bunun için sed, bash gerekmez yeterlidir: String manipulation dokümantasyon

$ 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 

atın.

+0

Teşekkür ederim, komik çünkü ben senaryoda başka bir yerde string manipülasyonunu kullandım ama bunu unutmuşum – rluks

+1

$ rootpath'ın bir eğik çizgi ile bitip bitmediğini bilmiyorsanız: 'shopt -s extglob; echo "$ {fullpath ## $ rootdir * (/)}" ' –

+0

Örneğim için kullanamıyorum, bir tane var =" branch_name_something "' ve 'two =" branch_name_ "'. Ben sadece $ birinden "bir şey" yazdıracağım. Yani, echo $ {# $ {two} one} 'ı denedim ama atıyordu: -bash: $ {# $ {two} one}: bad substitution'. Ne eksik olduğumu bilmiyorum –

8

böyle kullanmak gerekir, sed içinde değişkenler kullanmak için

  • ben çift tırnak (kabuk tek tırnak değişkenleri genişlemez)
  • kullanmak
  • Ben senin yolları slashesle çakışmaz başka ayırıcı kullanmak

Ör:

$ 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

Evet teşekkürler! Ve çok basit – gontard