2013-11-25 13 views
5

Tôi tạo ra một kịch bản đã được sử dụngthay thế cho cắt --output-delimiter

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

để thêm một dòng mới cho mỗi lệnh giá trị tách ra trong RHEL 5, cho ví dụ

[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 

Nhưng tiếc là khi tôi chạy lệnh tương tự trong Solaris 10, nó không hoạt động ở tất cả :(!

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] 

Tôi đã kiểm tra man page của 'cắt' và than ôi không có '--output-delimiter' trong đó!

Vì vậy, làm thế nào để đạt được điều này trong Solaris 10 (bash)? tôi đoán awk sẽ là một giải pháp, nhưng tôi không thể đóng khung lập các tùy chọn thích hợp.

Lưu ý: Dấu phẩy các biến eparated có thể có không gian "" trong chúng.

+0

Nếu bạn muốn lệnh cắt tương tự mà bạn có trên RHEL, hãy cài đặt gói [GNU coreutils] (https://www.gnu.org/software/coreutils/). – alanc

Trả lời

7

Còn việc sử dụng tr thì sao?

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

hoặc

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

Với :

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

Hoặc với :

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

Bằng cách nào đó tôi cảm thấy như một DUMBO LỚN !!! Tôi không bao giờ nghĩ đến việc sử dụng 'tr' hoặc 'sed' ... pfffttt ..... Cảm ơn rất nhiều vì câu trả lời! – Marcos

+0

'sed' không hoạt động, bash-3.00 # echo $ var | sed -e 's /,/\ n/g' hinhello hownare youndoing nhưng 'tr' đã hoạt động! – Marcos

+0

Uhms Tôi không có máy chủ Solaris để kiểm tra, nhưng có thể trong http://stackoverflow.com/questions/8991275/escaping-newlines-in-sed-replacement-string, bạn có thể tìm thấy một số manh mối. Và tốt để đọc 'tr' là tốt cho bạn :) – fedorqui

3

lẽ làm điều đó trong bản thân?

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

cảm ơn cho câu trả lời, nhưng tôi muốn một cái gì đó nhỏ hơn cũng tôi muốn không sử dụng một mảng cho việc này. – Marcos