如何使用bash按子字符串拆分字符串并将结果放入数组中?该字符串可能包含不同数量的子字符串,具体取决于系统输入。到目前为止,我没有系统输入的睾丸和平od码
String1="SuperDomain/Off/01|stack SuperDomain/Off/03|apply"
echo $String1 | awk '{split($0,a,"SuperDomain"); print a[1]}'
,它什么也没显示。我想使用整个数组,实际上我不知道我从输入中获得了多少子字符串。
答案 0 :(得分:0)
由于根据您的示例代码,您显然愿意使用awk
(尽管在您的问题中,您要求的是bash解决方案),所以该示例将在您的具体示例中起作用:
arr=( $(awk -F SuperDomain '{ print $2; print $3 }' <<<"$String1") )
这将用元素arr
和/Off/01|stack
填充bash数组/Off/03|apply
。对于一般情况(即,如果您不像示例中那样仅对字段2和3感兴趣),您当然会编写awk循环以打印出所有字段。
执行此操作时,您需要确定如何处理空白字段。例如,如果String1
包含'SuperDomainfooSuperDomainSuperDomainbar'
,则需要确定生成的bash数组应包含2个元素(“ foo”,“ bar”)还是3个或4个元素。
该方法要记住的另一点是,awk的字段分隔符(即-F
选项的参数)被解释为正则表达式。因此,如果您想沿着包含特殊regexp字符的固定分隔符分解字符串,则必须将其转义。
答案 1 :(得分:0)
要求不完全清楚。从样本输入中,我将需求读取为
请注意,这是“纯扑”的解决方案-没有awk,sed或外部程序。
String1="SuperDomain/Off/01|stack SuperDomain/Off/03|apply"
# Split into array
read -a data <<< "$String1"
# Strip the prefix from each element
a=( "${data[@]#SuperDomain}" )
# Show the final array
declare -p a
结果: 声明-a a =([0] =“ / Off / 01 | stack” [1] =“ / Off / 03 | apply”)