web-dev-qa-db-ja.com

文字列を複数行のファイルコンテンツに置き換えます

ファイル内の文字列SALTを別のファイルのコンテンツに置き換える必要があります。問題は、入力ファイルに複数行があることです。私は私のbashスクリプトで次のようなことを試しました:

SALT=`cat salt.txt`;
sed "s/SALT/$SALT/" wp-config.php > result.txt

salt.txtが1行の場合は問題ありませんが、それ以上の行がある場合は失敗します。 Perlができると読んだことがあります。しかし、私は方法がわかりません。私たちを手伝ってくれますか?

4
Emetrop

別のPerl方法:

Perl -pe 's/SALT/`cat salt.txt`/e' wp-config.php > result.txt

ここで重要なのは、/e regexpオプションで、Perlコマンドの結果を置換文字列として使用できるようにすることです。

1
Sylvain Pineau

bashに固執する場合は、文字列にもファイルにも表示されない文字を選択します。たとえば、@;その後:

SALT=`< salt.txt tr '\n' '@'`
sed "s/SALT/$SALT/" wp-config.php | tr '@' '\n' > result.txt

このように、置換前の文字列内のnewline文字は@に変更され、置換後は@文字がnewlinesに戻されるため、SALTは配列として扱われなくなり、長い文字列を含む変数として扱われます。

1
kos

あなたはこれを行うことができます:

sed -e "/SALT/{r salt.txt" -e "d}" wp-config.php  > result.txt

salt.txtはソルト、wp-config.phpは入力ファイル、SALTは置換する文字列です。

1
Helio
Perl -e 'open my $S, "<", "salt.txt" or die $!;
         $salt = do { local $/ ; <$S> };
         s/SALT/$salt/, print while <>;
        ' wp-config.php > result.txt

最初の行はsalt.txtを開きます。
2行目は、その内容を$ salt変数に読み込みます。
3番目は、コマンドライン引数をファイル名として受け取り、ファイルを1行ずつ読み取り、文字列を置き換えます。

0
choroba