我需要用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
这里的关键是/e
regexp 选项允许我们使用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 变量。
第三行将命令行参数作为文件名,逐行读取文件并替换字符串。