我有像
这样的字符串name1::1.1.1.1::ps -ax
我想使用bash脚本来基于分隔符::
拆分字符串。
所需的输出应该是3个元素的数组
("name1" "1.1.1.1" "ps -ax")
没有双引号
感谢您的帮助。
答案 0 :(得分:4)
假设数组数据中没有:
,请使用bash
模式替换将::
压缩到:
,同时将字符串分配给$array
,然后显示整个数组,然后只是元素#2 :
a="name1::1.1.1.1::ps -ax"
IFS=: array=(${a//::/:}) ; echo ${array[@]} ; echo "${array[2]}"
输出:
name1 1.1.1.1 ps -ax
ps -ax
但是如果数组数据中有:
怎么办?特别是在该字段的第三个字段(命令)和仅中。将read
与虚拟变量一起使用以吸收额外的::
分隔符:
a="name1::1.1.1.1::parallel echo ::: 1 2 3 ::: a b"
IFS=: read x a y b z <<< "$a"; array=("$x" "$y" "$z"); printf "%s\n" "${array[@]}"
输出:
name1
1.1.1.1
parallel echo ::: 1 2 3 ::: a b
答案 1 :(得分:1)
唯一安全的可能性是使用循环:
a='name1::1.1.1.1::ps -ax'
array=()
a+=:: # artificially append the separator
while [[ $a ]]; do
array+=( "${a%%::*}" )
a=${a#*::}
done
这适用于a
中的任何符号(空格,圆角字符,换行符等)
答案 2 :(得分:0)
i=0
string="name1::1.1.1.1::ps -ax"
echo "$string" | awk 'BEGIN{FS="::";OFS="\n"}{$1=$1;print $0}'>tempFile
while read line;
do
arr["$i"]="$line"
i=$(expr $i + 1)
done<tempFile
echo "${arr[@]}"
echo "${arr[0]}"
echo "${arr[1]}"
echo "${arr[2]}"
输出:
sh-4.4$ ./script1.sh
name1 1.1.1.1 ps -ax
name1
1.1.1.1
ps -ax
答案 3 :(得分:0)
var filename as listBox.SelectedItem as string;
if(string.IsNullOrWhiteSpace(filename))
{
return;
}
var path = Path.Combine(@"C:\", filename);
var fileinfo = new FileInfo(path);