通过分隔符(带分隔符的最后一行)将bash字符串拆分为数组

时间:2017-03-28 20:08:55

标签: regex bash

我很难分割出这样的字符串:

444,555,text with, separator

进入这个:

444
555
text with, separator

即。到3元素数组(最后一个元素可能包含逗号)

我尝试了sed,但由于最后一个逗号,我最终得到了4个元素。

有什么想法吗?

谢谢,

3 个答案:

答案 0 :(得分:2)

使用bash和array:

s='444,555,text with, separator'
IFS=, read -r a b c <<< "$s"
array=("$a" "$b" "$c")
declare -p array

输出:

declare -a array='([0]="444" [1]="555" [2]="text with, separator")'

答案 1 :(得分:1)

sed编辑器允许替换 regexp 数字 匹配(即 k < / em> -th出现在一行内的字符串):

str="444,555,text with, separator"
sed 's/,/\n/1; s/,/\n/1' <<< $str

输出:

444
555
text with, separator

s/,/\n/1 - 1这是一个数字标志,指示第一次出现,\n替换

以下将给出相同的结果(暗示每次替换的第一场比赛):

sed 's/,/\n/; s/,/\n/' <<< $str

两次连续替换将产生3行(块)

答案 2 :(得分:0)

echo "444,555,text with, separator" | sed  "s/\([0-9]*\),\([0-9]*\),\(.*\)/\1\n\2\n\3/"

输出:

444
555
text with, separator