0

編集中の構成ファイルがあり、最初のパスでは正しく変更されていますが、次の 2 行では sed が空白の行を返します。

編集する行は、

word.word.word.database=dbase
word.word.word.username=someone
word.word.word.password=someone

私が使用しているsedコマンドは

cat config.file | \sed -e "s/database/$dbname/" > config.file.1

cat config.file.1 | \sed -e "s/username/$dbuser/" > config.file.2

cat config.file.2 | \sed -e "s/database/$password/" > config.file.3

 cp config.file.3 config.file

最終結果は

word.word.word.database=dbname
word.word.word.username=
word.word.word.password=

これで何が問題なのかわかりません。どんな助けでも素晴らしいでしょう。

ありがとう!

4

1 に答える 1

1

$dbname$dbuserおよび$passwordシェル変数のように扱われるようになるため、先頭のドル記号が使用されます。シェル変数を取り込もうとしている場合は、次を試してください。

 sed -i -e "s/database/$dbname/" -e "s/username/$dbuser/" -e "s/password/$password/" config.file

-i上記のコマンドにフラグを追加したことに注意してください。を使用したインプレース編集が可能になりますGNU sed。その他のタイプでsedは、次のように拡張子を設定する必要があり-i.bakます。これにより、バックアップ ファイルが作成されます。あなたの場合、これは次のようになりますconfig.bak

結果の完全なリストを取得するだけの場合は、ドル記号を削除するか、一重引用符を使用してください。例えば:

sed -i -e "s/database/dbname/" -e "s/username/dbuser/" -e "s/password/password/" config.file

また

sed -i -e 's/database/$dbname/' -e 's/username/$dbuser/' -e 's/password/$password/' config.file

EDIT1:

あなたの質問を完全に誤解している場合は、次のことを試してください。

sed -i -e "s/\(.*database=\).*/\1dbname/" -e "s/\(.*username=\).*/\1dbuser/" -e "s/\(.*password=\).*/\1password/" config.file

結果:

word.word.word.database=dbname
word.word.word.username=dbuser
word.word.word.password=password

EDIT2:

$dbname$dbuserおよびというラベルの付いたシェル変数がある場合$password:

sed -i -e "s/\(.*database=\).*/\1$dbname/" -e "s/\(.*username=\).*/\1$dbuser/" -e "s/\(.*password=\).*/\1$password/" config.file
于 2012-11-06T23:32:58.930 に答える