1

私はシェルプログラミングに不慣れです。

次のような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 に答える