Bash [kapalı] 'da beyaz boşlukları (alt çizgi) _ ile değiştirmenin en kolay yolu


92

son zamanlarda XenServer'da VM'leri ayrıştıran küçük bir komut dosyası yazmam gerekti ve örneğin Windows XP veya Windows Server 2008'de VM'lerin adları çoğunlukla beyaz boşluklarla olduğundan, bu beyaz boşlukları kırpıp altçizgilerle değiştirmek zorunda kaldım _. Bunu yapmak için basit bir çözüm buldum ve konu dize manipülasyonu olduğunda harika bir araç.

echo "This is just a test" | sed -e 's/ /_/g'

İadeler

This_is_just_a_test

Bunu başarmanın başka yolları var mı?


8
ve soru şu?
RageZ

2
Merhaba latz, Stackoverflow bir soru ve cevap sitesidir. Siz sorular sorarsınız ve diğerleri cevaplar veya başkalarının sorularını cevaplayabilirsiniz. Bilginizi paylaşmak istiyorsanız, bir soru sorabilir, ardından kendiniz cevaplayabilirsiniz (başkalarının da cevaplaması için biraz zaman bıraktıktan sonra).
mouviciel

2
oups bu bilgiyi bu şekilde ekleyeceğimi düşündü, böylece burada saklanacak. Her neyse, bir dahaki sefere
dediğin

Yanıtlar:


175

Bunu sadece kabuğu kullanarak yapabilirsiniz, gerek yok trveyased

$ str="This is just a test"
$ echo ${str// /_}
This_is_just_a_test

5
Veya ASCII olmayan tüm kelime karakterlerini alt çizgilere dönüştürün ${str//[^a-zA-Z0-9]/_}:; Her iki durumda da, saf POSIX kabuğuna bağlı kalmıyorsanız, kullanabileceğiniz özellikleri kullanın.
guns

yasal olan noktalama işaretleri de olabilir. asla bilemeyiz.
ghostdog74

bu çözüm için teşekkürler tam olarak aradığım şey. Çok teşekkürler
flazzarini

18

Bu sınırda programlamadır, ancak tr'yi kullanmayı deneyin :

$ echo "this is just a test" | tr -s ' ' | tr ' ' '_'

Yapmalı. İlk çağrı boşlukları sıkıştırır, ikincisi alt çizgi ile değiştirir. Muhtemelen SEKME ve diğer boşluk karakterlerini eklemeniz gerekir, bu yalnızca boşluklar içindir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.