ファイル内の文字列SALT
を別のファイルのコンテンツに置き換える必要があります。問題は、入力ファイルに複数行があることです。私は私のbashスクリプトで次のようなことを試しました:
SALT=`cat salt.txt`;
sed "s/SALT/$SALT/" wp-config.php > result.txt
salt.txtが1行の場合は問題ありませんが、それ以上の行がある場合は失敗します。 Perlができると読んだことがあります。しかし、私は方法がわかりません。私たちを手伝ってくれますか?
別のPerl
方法:
Perl -pe 's/SALT/`cat salt.txt`/e' wp-config.php > result.txt
ここで重要なのは、/e
regexpオプションで、Perl
コマンドの結果を置換文字列として使用できるようにすることです。
bash
に固執する場合は、文字列にもファイルにも表示されない文字を選択します。たとえば、@
;その後:
SALT=`< salt.txt tr '\n' '@'`
sed "s/SALT/$SALT/" wp-config.php | tr '@' '\n' > result.txt
このように、置換前の文字列内のnewline
文字は@
に変更され、置換後は@
文字がnewlines
に戻されるため、SALT
は配列として扱われなくなり、長い文字列を含む変数として扱われます。
あなたはこれを行うことができます:
sed -e "/SALT/{r salt.txt" -e "d}" wp-config.php > result.txt
salt.txt
はソルト、wp-config.php
は入力ファイル、SALT
は置換する文字列です。
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行ずつ読み取り、文字列を置き換えます。