Shell 对于不同的配置,如何使用键/值对分隔字符串?

Shell 对于不同的配置,如何使用键/值对分隔字符串?,shell,unix,awk,Shell,Unix,Awk,下面的输出是我运行alias impala时得到的结果(除了在一行上没有反斜杠)。但是,我希望在从文本文件读取此信息时,提取粗体信息并将其动态分配给变量。我需要帮助或模式命令来提取信息并将其分配给变量,这些变量也将用于其他目的 alias impala='impala shell-i****--数据库=**abcd**\ --kerberos--kerberos_服务_名称=**xyzq**--ssl\ --ca\u cert=**/ab/cd/ef/gh/abc.pem**--query\u

下面的输出是我运行
alias impala
时得到的结果(除了在一行上没有反斜杠)。但是,我希望在从文本文件读取此信息时,提取粗体信息并将其动态分配给变量。我需要帮助或模式命令来提取信息并将其分配给变量,这些变量也将用于其他目的

alias impala='impala shell-i****--数据库=**abcd**\
--kerberos--kerberos_服务_名称=**xyzq**--ssl\
--ca\u cert=**/ab/cd/ef/gh/abc.pem**--query\u option=abc\u SYNC=1'
集--$(sed's/*-i\([^[:space:]*\)--数据库=\([^[:space:]*\).\u名称=\([^[:space:]*\)--ssl--证书=\([^[:space:]*\)./\1\2\3\4/'文件名)
server=“$1”
dbase=“$2”
服务=“3美元”
cert=“$4”

正则表达式很可怕,但每次都会捕获您感兴趣的四个字符串,介于
\(
\)
之间。如果愿意,可以减少上下文。您可以每次编写
[^]
而不是
[^[:space:]
,只要您确信没有人会使用文件中的任何选项卡。
filename
是包含问题中显示的字符串(
alias
命令)的文件。
set--
设置来自
sed
命令输出的位置参数(
$1
$4
)。赋值为位置参数中的值命名。

简短的回答是“不要使用别名-使用函数或脚本”。就个人而言,我会使用脚本而不是函数。在脚本(或函数)中,您可以进行任何需要的分析,从文本文件中提取值并将其替换到命令中。Hi Jonathan我使用的不是别名,而是服务器级别设置的环境变量,我可以使用它动态提取所需信息,然后创建变量-通过这种方式,当我在不同的环境中运行时,我会得到不同的主机/db和其他信息,这些信息将用于不同的属性文件创建。很抱歉,您可以忽略别名-处理文本文件中提供的信息,如何通过unix命令或awk提取粗体信息并分配给变量。