將字串替換為多行檔案內容

將字串替換為多行檔案內容

我需要用SALT另一個文件的內容替換文件中的字串。問題是輸入檔有多行。我在 bash 腳本中嘗試了類似的操作:

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

鹽.txt是單行,但如果有更多行,則會失敗。我讀到它可以做 PERL。但我不知道該怎麼辦。你可以幫幫我嗎?

答案1

其他perl方式:

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

這裡的關鍵是/eregexp 選項,它允許我們使用perl命令結果作為替換字串。

答案2

如果您想堅持使用bash,請選擇一個既不會出現在字串中也不會出現在文件中的字符,比方說@;然後:

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

這樣,在替換之前,newline字串中的字元將更改為,@而在替換之後,@字元將更改回newlines,因此SALT不再將其視為數組,而只是將其視為包含長字串的變數。

答案3

你可以這樣做:

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

salt.txtsalt 是哪裡,wp-config.php是輸入文件,SALT是要替換的字串

答案4

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.
第二行將其內容讀取到 $salt 變數中。
第三個將命令列參數作為檔案名,逐行讀取檔案並替換字串。

相關內容