我目前有一个变量,其值类似于:
x_snd_user=''
x_snd_appli=''
x_snd_text=''
x_rcv_user=''
x_rcv_appli=''
x_rcv_text=''
x_dup_from_xfer='0'
x_route_from_xfer='0'
x_route_to_xfer='0'
x_reply_by_xfer='0'
x_reply_to_xfer='0'
x_routed_to_XIB='N'
x_end_xfer_script=''
x_ftp_command=''
例如,如何匹配3个模式(x_snd_appli, x_route_from_xfer, x_ftp_command
),格式化这些模式(awk -F"'" '{print $2}'
)并将它们分配给不同的变量?
例如,我有一些变量,想要将输出分配给这些变量:
- Application= The value of <x_snd_appli>
- Route= The value of <x_route_from_xfer>
- Command= The value of <x_ftp_command>
最好不要安装一些不需要安装的东西。 因此,如果可能的话,最好使用AWK / perl。
该变量的完整内容非常大(大约45行)。 当我运行脚本1x时,它的运行时间可能约为1000x。 因此,我不想将数据写入文件/循环超过10次以awk / grep不同的值并将它们分配给变量。
答案 0 :(得分:1)
您已经拥有一个有效的Shell脚本。您可以直接获取它:
$ source ./file
$ echo $x_dup_from_xfer
0
要重新分配,可以使用一些sed / awk,例如:
$ eval $(sed -n 's/^x_route_from_xfer=/Route=/p' file)
$ echo $Route
0
-n
关闭行的自动打印,并且s
替换,p
打印替换结果。多个sed命令:
$ eval $(sed -n 's/^x_route_from_xfer=/Route=/p;s/.../.../p' file)
但是请注意,源和评估要求由您控制文件内容。
输入也可能来自变量:
eval $(sed ... <<< "$var")
答案 1 :(得分:0)
怎么样:
#!/bin/bash
transfer="
x_snd_user=''
x_snd_appli=''
x_snd_text=''
x_rcv_user=''
x_rcv_appli=''
x_rcv_text=''
x_dup_from_xfer='0'
x_route_from_xfer='0'
x_route_to_xfer='0'
x_reply_by_xfer='0'
x_reply_to_xfer='0'
x_routed_to_XIB='N'
x_end_xfer_script=''
x_ftp_command=''
"
# or assign "transfer" with a output of other command.
while read -r line; do
eval "$line"
done < <(
awk -F= 'BEGIN {
a["x_snd_appli"] = "Application"
a["x_route_from_xfer"] = "Route"
a["x_ftp_command"] = "Command"
}
a[$1] {print a[$1] "=" $2}
' <<< "$transfer"
)
echo "Application=$Application"
echo "Route=$Route"
echo "Command=$Command"
使用eval
时,我们需要特别注意。