Yapabilmek gerekir bash bir dize bir nokta ( .) ile bir boşluk ( ) değiştirin .
Bunun oldukça basit olacağını düşünüyorum, ama yeniyim, bu yüzden bu kullanım için benzer bir örneği nasıl değiştireceğimizi anlayamıyorum.
Yapabilmek gerekir bash bir dize bir nokta ( .) ile bir boşluk ( ) değiştirin .
Bunun oldukça basit olacağını düşünüyorum, ama yeniyim, bu yüzden bu kullanım için benzer bir örneği nasıl değiştireceğimizi anlayamıyorum.
Yanıtlar:
Satır içi kabuk dizesi değiştirme özelliğini kullanın. Misal:
foo=" "
# replace first blank only
bar=${foo/ /.}
# replace all blanks
bar=${foo// /.}
Daha fazla bilgi için http://tldp.org/LDP/abs/html/string-manipulation.html adresine bakın.
tr! ... Kullanılabilir hafıza ve hw kaynaklarına bağlı olarak ... Ama haklısınız !: Yapılacak işin türüne bağlı olarak, özel araçlar daha verimli kalıyor!
$'\n'
Şöyle kullanabilirsiniz tr, şöyle:
tr " " .
Misal:
# echo "hello world" | tr " " .
hello.world
Gönderen man tr:
AÇIKLAMA
Standart çıkışa yazılarak karakterleri standart girdiden çevirin, sıkıştırın ve / veya silin.
Bash'da, yapı ile bir dizede desen değiştirme yapabilirsiniz ${VARIABLE//PATTERN/REPLACEMENT}. Sadece /ve //ilk kullanımın yerini almak için değil kullanın . Desen, dosya küreleri gibi bir joker karakter desenidir.
string='foo bar qux'
one="${string/ /.}" # sets one to 'foo.bar qux'
all="${string// /.}" # sets all to 'foo.bar.qux'
Parametre ikamesi kullanın:
string=${string// /.}
Bunu yollar için deneyin:
echo \"hello world\"|sed 's/ /+/g'|sed 's/+/\/g'|sed 's/\"//g'
Çift tırnaklı dizenin içindeki boşluğu bir +şarkı ile değiştirir, ardından +işareti ters eğik çizgi ile değiştirir , ardından çift tırnak işaretlerini kaldırır / değiştirir.
Bunu Cygwin'deki yollardan birindeki boşlukları değiştirmek için kullanmak zorunda kaldım.
echo \"$(cygpath -u $JAVA_HOME)\"|sed 's/ /+/g'|sed 's/+/\\/g'|sed 's/\"//g'
sed. Alıntılar önemsizdir.
truzun dizeler için tercih edilebilir . Sistemimde karakterlerdentrdaha fazla dizelerle başlayan bash'den daha iyi performans gösterir1000. Bash'ın zaman karmaşıklığı doğrusaldan daha kötü gibi görünüyor. Küçük bir test:x="$(tr -dc 'a-z \n' </dev/urandom | head -c1M)"; time y="$(tr ' ' \\- <<< "$x")"; time z="${x// /-}". 1M dize uzunluğu ile (= 2 ^ 20)traldı0.04sve bash 5.0.11 aldı17s. 2M iletraldı0.07s(beklenen) ama bash aldı69s(iki kez dize uzunluğu için sürece 4 kez).