Мне нужно заменить строку SALT
в файле содержимым другого файла. Проблема в том, что во входном файле есть несколько строк. Я попробовал что-то вроде этого в моем скрипте bash:
SALT=`cat salt.txt`;
sed "s/SALT/$SALT/" wp-config.php > result.txt
Это нормально работает, когда salt.txt является одной строкой, но если есть больше строк, это терпит неудачу. Я читал, что это может сделать 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
.
вторая строка читает его содержание в переменную $salt.
треть берет параметры командной строки в качестве имен файлов, читает файлы линию за линией и заменяет строку.