2013-11-25 2 views
5

Я создал сценарий, который использовалзамена для разреза --output-разделителя

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

, чтобы добавить новую строку для каждой команды отделенного значения в RHEL 5, например, для

[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 

Но, к сожалению, когда я запускаю ту же команду в Solaris 10, она не работает вообще :(!

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] 

Я проверил страницу человека для «вырезать» и увы нет «--output-разделитель» там!

Так как же я могу добиться этого в Solaris 10 (Баш)? Я думаю AWK бы решение, но я не могу подстраивать параметры правильно.

Примечание: запятая в них могут иметься «промежуточные переменные».

+0

Если вы хотите ту же команду вырезать вы имеете на RHEL, установите пакет [GNU Coreutils] (https://www.gnu.org/software/coreutils/). – alanc

ответ

7

Как насчет использования tr?

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

или

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

С :

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

Или с :

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

Каким-то образом я чувствую себя БОЛЬШИМ ДУМБО !!! Я никогда не думал об использовании «tr» или «sed» ... pfffttt ..... Большое спасибо за ответ! – Marcos

+0

'СЭД' не работает, Баш-3.00 # Эхо $ вар | СЭД -e 's /,/\ п/г' hinhello hownare youndoing но 'тр' работал! – Marcos

+0

Uhms У меня нет сервера Solaris для тестирования, но, возможно, в http://stackoverflow.com/questions/8991275/escaping-newlines-in-sed-replacement-string вы можете найти некоторые подсказки. И хорошо читать 'tr' было хорошо для вас :) – fedorqui

3

Возможно сделать это в самом ?

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

спасибо за ответ, но я бы предпочел что-то меньшее, и я бы не хотел использовать массив для этого. – Marcos

Смежные вопросы