从String中提取子字符串

时间:2012-04-20 14:07:06

标签: bash shell

我是shell编程的新手。

我有一个类似于db连接的String表示:

<user>:<password>@<host>

我想从String中提取每个属性(用户,密码和主机)。

2 个答案:

答案 0 :(得分:3)

一种天真的方式是:

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

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

答案 1 :(得分: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中开发自己的解析器!