sedを使用して別の文字列を一度に検索/置換する

sedを使用して別の文字列を一度に検索/置換する

私はsedを使ってPHPファイルで設定ディレクティブを探します。デフォルトでは文字列を設定し、database_name_hereconfig -sample.phpで適切な値を設定する必要があります(そしてファイル名をconfig.phpに変更する必要があります)。現在のソリューションは、sedを3回使用して出力を一時ファイルにリダイレクトします。username_herepassword_here

sed -e 's/database_name_here/foo/g' config-sample.php > /tmp/config.1
sed -e 's/username_here/bar/g' /tmp/config.1 > /tmp/config.2
sed -e 's/password_here/bat/g' /tmp/config.2 > config.php

2つの一時ファイルを作成せずに同じ結果をどのように取得できるのか疑問に思います。

答え1

-esedに複数のパラメータを渡すことができます。各行で各変換を順番に適用します。

<config-sample.php sed -e 's/database_name_here/foo/g' -e 's/username_here/bar/g' -e 's/password_here/bat/g' >config.php

一部の実装では、区切り文字を使用して複数のコマンドを区別することもできますが、必ずしもそうではなく、終了行を折り返す必要がある;コマンドでは機能しません。すべてではありませんが、ほとんどの実装では、複数のコマンドを改行文字で区切ることができます。

複数のコマンドが必要な場合は、一時ファイルを使用する必要はなく、パイプを使用できます。

<config-sample.php sed -e '…' | grep -v '^#' >config-without-comments.php

関連情報