用多行文件内容替换字符串

用多行文件内容替换字符串

我需要用SALT另一个文件的内容替换文件中的字符串。问题是输入文件有多行。我在 bash 脚本中尝试了类似这样的操作:

SALT=`cat salt.txt`;
sed "s/SALT/$SALT/" wp-config.php > result.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.txt盐在哪里,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 变量。
第三行将命令行参数作为文件名,逐行读取文件并替换字符串。

相关内容