böyle, sed ile son dir nasıl kaldırılır:Son dizini sed ile bir yoldan nasıl kaldırılır (dirname kullanmıyor)?
echo "/dir1/dir2/dir3/dir4" | sed .....
Yani /dir1/dir2/dir3
tanınacak. o kabuk parçası ise
böyle, sed ile son dir nasıl kaldırılır:Son dizini sed ile bir yoldan nasıl kaldırılır (dirname kullanmıyor)?
echo "/dir1/dir2/dir3/dir4" | sed .....
Yani /dir1/dir2/dir3
tanınacak. o kabuk parçası ise
sed 's,/*[^/]\+/*$,,'
ardından dirname
kesinlikle daha net olacaktır.
Dizinde "." varsa, bu çalışmaz (dönem) ismiyle –
@ChrisF Huh? Neden böyle yazdın? echo a.b/c.d/e.f | sed 's,/* [^ /] \ +/* $ ,,' 'a.b/c.d' döndürür ya da sed sürümünde yok mu? Benim regexp'in '' ile hiç ilgisi yok. – przemoc
echo "/ etc1/etc2/etc3/etc" | sed -e "ler // [^ /] * $ //"
üretir
/etc1/etc2/vb 3.
Temelde değil son çizgiden sonra sonunda herhangi bir şey kapalı şerit başka bir eğik çizgi içerir.
Oops, virgüllerin, przemoc gibi sınırlayıcı olarak kullanıldığını, betikteki eğik çizgiden kaçmaktan kaçınmak için daha kolay okunabilir. Ben her zaman böyle bir hata yaparım. –
Harici araçları
$ a="/dir1/dir2/dir3/dir4"
$ echo ${a%/*}
Şu anda kabul edilen cevap kesinlikle iyi olsa da, sorunun bash ile ilgili olması durumunda bunun kabul edilen cevap olması gerektiğine inanıyorum. Bash parametre ikamesi, sed'den daha "gerçek" bash hisseder. – anuragw
"birdizin" kabuk komutunu kullanmak zorunda değilsiniz:
dirname /dir2/dir3/dir4
, biçimlendirme daha fazla dikkat edin ve Cevapların ifadesi. –
@Pavel: ummm, errrr, sorular? (ve yorumlar) ;-) –
@Dennis, EPIC başarısız, kurtarılamaz: -D –