2016-03-25 4 views
0

VESTACPがgrepを使用しているため、grepに問題があります。Bash:ファイルから文字列をgrepする方法

私は

echo host_str=$(grep "HOST='$1'" $VESTA/conf/mysql.conf) 

を実行したときに、私はコード

に上記の貼り付けmysql.confファイルのホストがあるが、今私は、空の結果を取得し、ファイルmysql.conf

HOST='localhost' USER='root' PASSWORD='xxxxxx' CHARSETS='UTF8,LATIN1,WIN1250,WIN1251,WIN1252,WIN1256,WIN1258,KOI8' MAX_DB='500' U_SYS_USERS='' U_DB_BASES='1' SUSPENDED='no' TIME='05:32:47' DATE='2016-03-20' 

を持っています

それで何が悪いのですか?

UPDATE ::ベスタはデシベル

host_str=$(grep "HOST='$1'" $VESTA/conf/mysql.conf) 
eval $host_str 
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ]; then 
    echo "Error: mysql config parsing failed" 
    log_event "$E_PARSING" "$EVENT" 
    exit $E_PARSING 
fi 

コードブロックを接続して、私はあなたがおそらく$1を使用したくない

Error: mysql config parsing failed

+0

これをスクリプトで実行していますか?あなたは何をしたいのですか? –

+1

'$ 1'を印刷して値を確認できますか? – anubhava

+0

echo $ 1 empty ................ – user889030

答えて

1

$1は、スクリプトの最初のパラメータです。

したがって、host_str=$(grep "HOST='$1'" $VESTA/conf/mysql.conf)は、パラメータに基づいてファイルからいくつかの変数を含む行を取得し、eval $host_strはこれらの変数をスクリプトに設定します。

したがって、あなたのファイルでどのホストを探すかを知るにはスクリプトに引数が必要です。ローカルホストの場合は、./yourscript.sh localhostを実行します。

1

を取得します。むしろこれを試してみてください。

echo host_str=$(grep -o "HOST='[^']*'" $VESTA/conf/mysql.conf) 

[^']*は、単一引用符の間であることを起こるすべてに展開されます。 -oオプションは、行全体ではなく、一致する文字列を取得するようにします。

+0

@Aaron:Que?パターンを正規表現と見なさない 'grep'の唯一のバージョンは、最近' grep -F'という名前の 'fgrep'です。 '-E'を追加すると' grep'が 'egrep'モードで実行されます。基本正規表現の代わりに拡張正規表現が使われます。 –

+0

vestacpはさらなる操作のために$ 1を必要とします。 – user889030

+0

しかし、あなたがパターンに '$ 1'を保持し、それがファイル内のものに正確に展開されなければ、あなたの一致結果は空のままです。 – Harald

関連する問題