2024-04-24 13:52:25 发布
网友
我有一个python列表作为字符串,其结构如下:
var="["127.0.0.1:14550","127.0.0.1:14551"]"
我想将字符串转换为bash数组,以便能够使用bash循环:
for ip in ${var[@]}; do something done
一个选项是将字符串视为json,并使用jq对其进行解析:
jq -rc '.[]' <<< '["127.0.0.1:14550","127.0.0.1:14551"]' | while read i; do echo $i done
127.0.0.1:14550127.0.0.1:14551
127.0.0.1:14550
127.0.0.1:14551
使用Perl解析Python输出,如下所示(注意字符串周围的单引号,其中包含双引号):
array=( $( echo '["127.0.0.1:14550","127.0.0.1:14551"]' | perl -F'[^\d.:]' -lane 'print for grep /./, @F;' ) ) echo ${array[*]}
输出:
127.0.0.1:14550 127.0.0.1:14551
或者,使用jq,如0stone0的答案中所示,或者通过xargs管道输出,这会删除引号,如下所示:
jq
xargs
array=( $( echo '["127.0.0.1:14550","127.0.0.1:14551"]' | jq -c '.[]' | xargs ) )
Perl one liner使用以下命令行标志:-e:告诉Perl在线查找代码,而不是在文件中。-n:一次循环输入一行,默认情况下将其分配给$_。-l:在内联执行代码之前,去除输入行分隔符("\n"默认为*NIX),并在打印时追加它。-a:在空格或{}选项中指定的正则表达式上将{}拆分为数组{}。-F'[^\d.:]':在除数字、句点或冒号以外的任何字符(而不是空格)上拆分为@F
-e
-n
$_
-l
"\n"
-a
-F'[^\d.:]'
@F
print for grep /./, @F;:将行拆分为字符串数组@F,选择仅使用grep非空字符串,每行打印一个
print for grep /./, @F;
grep
另请参见:^{}: how to execute the Perl interpreter: command line switches
一个选项是将字符串视为json,并使用jq对其进行解析:
使用Perl解析Python输出,如下所示(注意字符串周围的单引号,其中包含双引号):
输出:
或者,使用
jq
,如0stone0的答案中所示,或者通过xargs
管道输出,这会删除引号,如下所示:Perl one liner使用以下命令行标志:
}选项中指定的正则表达式上将{}拆分为数组{}。
-e
:告诉Perl在线查找代码,而不是在文件中。-n
:一次循环输入一行,默认情况下将其分配给$_
。-l
:在内联执行代码之前,去除输入行分隔符("\n"
默认为*NIX),并在打印时追加它。-a
:在空格或{-F'[^\d.:]'
:在除数字、句点或冒号以外的任何字符(而不是空格)上拆分为@F
print for grep /./, @F;
:将行拆分为字符串数组@F
,选择仅使用grep
非空字符串,每行打印一个另请参见:}: how to execute the Perl interpreter: command line switches
^{
相关问题 更多 >
编程相关推荐