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.
tr
uzun dizeler için tercih edilebilir . Sistemimde karakterlerdentr
daha 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)tr
aldı0.04s
ve bash 5.0.11 aldı17s
. 2M iletr
aldı0.07s
(beklenen) ama bash aldı69s
(iki kez dize uzunluğu için sürece 4 kez).