1

我是 shell 编程的新手。

我有一个 db 连接的字符串表示形式,如下所示:

<user>:<password>@<host>

我想从字符串中提取每个属性(用户、密码和主机)。

4

2 回答 2

3

一种天真的方法是:

$ IFS=:@ read -a args <<< "<user>:<password>@<host>"
$ echo ${args[0]}
<user>
$ echo ${args[1]}
<password>
$ echo ${args[2]}
<host>

显然,如果用户名或密码可以包含 ':' 或 '@' 字符,或者您的主机恰好是 IPv6 地址,这将不起作用;)。

于 2012-04-20T14:11:40.780 回答
0

Bash 字符串操作可以按如下方式完成:

input="<user>:<password>@<host>"
colonPos=$(expr index "${input}" ':')
atPos=$(expr index "${input}" '@')
user=${input:0:$colonPos-1}
pass=${input:$colonPos:$atPos-$colonPos-1}
host=${input:$atPos}
echo -e "input: ${input}\nuser: ${user}\npass: ${pass}\nhost: ${host}"

它也不适用于许多:和/或@,但你可以玩:

tmpStr="${input//[^\:]/}"
colonAmount=${#tmpStr}
tmpStr="${input//[^@]/}"
atAmount=${#tmpStr}
echo -e "colon(s) amount: ${colonAmount}\nat(s) amount: ${atAmount}"

让我们尝试if then elif else fi使用这些*Amount变量在 bash 中开发您自己的解析器!

于 2012-04-20T14:29:44.193 回答