2012-04-20 48 views
1

シェルプログラミングの新機能です。文字列から部分文字列を抽出します。

私はそのように見ているDB接続のString表現があります。

<user>:<password>@<host> 

をそして私は文字列から各属性(ユーザー、パスワード、およびホスト)を抽出したいと思います。それを行うには

答えて

3

素朴な方法は、次のようになります。「:」または「@」文字、またはあなたのホストがに発生した場合

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

ユーザー名やパスワードを含めることができる場合、これは動作しません。 IPv6アドレスにする;)。

+0

上に、ありがとうございます。そしてyes、uidとpwdには区切り文字が含まれません – Joly

+1

配列を必要としない場合は、 'read user pass host <<< ...' –

0

バッシュの文字列操作は、次のように行うことができます。

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で開発してください!

関連する問題