2013-11-25 18 views
5

I bileşimleri için, RHEL 5'de her komut ayrılmış değer için bir yeni satır eklemekyerine --output-sınırlayıcı

cut -d',' -f- --output-delimiter=$'\n' 

kullanılarak bir komut dosyası oluşturuldu Hiçbir yoktur ne yazık ki

[root]# var="hi,hello how,are you,doing" 
[root]# echo $var 
hi,hello how,are you,doing 
[root]# echo $var|cut -d',' -f- --output-delimiter=$'\n' 
hi 
hello how 
are you 
doing 

Ama Solaris 10'da aynı komutu çalıştırdığınızda ne yazık ki, tüm :(en çalışmıyor!

bash-3.00# var="hi,hello how,are you,doing" 
bash-3.00# echo $var 
hi,hello how,are you,doing 
bash-3.00# echo $var|cut -d',' -f- --output-delimiter=$'\n' 
cut: illegal option -- output-delimiter= 

usage: cut -b list [-n] [filename ...] 
     cut -c list [filename ...] 
     cut -f list [-d delim] [-s] [filename] 

Ben 'cut' man sayfasını kontrol edilip orada '--output-sınırlayıcı'! ı? ı awk bir çözüm olacağını tahmin Solaris 10 (bash) içinde bunu başarmak ama düzgün seçenekleri çerçeveye edemiyorum nasıl Yani

.

Not: Virgül Ayrılmış değişkenler içinde "" boşluk olabilir.

+0

Eğer RHEL üzerindeki aynı kesim komutunu istiyorsanız, [GNU coreutils] (https://www.gnu.org/software/coreutils/) paketini yükleyin. – alanc

cevap

7

Bunun için tr'u kullanmaya ne dersiniz? ile

$ tr ',' '\n' <<< "$var" 
hi 
hello how 
are you 
doing 

veya

$ echo $var | tr ',' '\n' 
hi 
hello how 
are you 
doing 

:

$ awk '1' RS=, <<< "$var" 
hi 
hello how 
are you 
doing 
+0

Bir şekilde BÜYÜK BİR DUMBO gibi hissediyorum! 'Tr' veya 'sed' kullanmayı hiç düşünmedim ... pfffttt ..... Cevabınız için çok teşekkürler! – Marcos

+0

işe yaramadı 'sed' bash-3.00 # echo $ var | sed -e 's /,/\ n/g' hinhello hownare youndoing ama 'tr' çalıştı! – Marcos

+0

Uhms Test etmek için bir Solaris sunucum yok, ama belki de http://stackoverflow.com/questions/8991275/escaping-newlines-in-sed-replacement-string adresinde bazı ipuçları bulabilirsiniz. Ve okumak için iyi 'tr' sizin için iyiydi :) – fedorqui

3

Belki kendisinde bunu yapmak:

$ sed 's/,/\n/g' <<< "$var" 
hi 
hello how 
are you 
doing 

Ya ile

?

var="hi,hello how,are you,doing" 
printf "$var" | (IFS=, read -r -a arr; printf "%s\n" "${arr[@]}") 
hi 
hello how 
are you 
doing 
+0

cevabınız için teşekkürler, ama ben daha küçük bir şey tercih ederdim ben de bunun için bir dizi kullanmak istemiyorum. – Marcos