Заменить строку многострочным содержимым файла

Мне нужно заменить строку SALT в файле содержимым другого файла. Проблема в том, что во входном файле есть несколько строк. Я попробовал что-то вроде этого в моем скрипте bash:

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

Это нормально работает, когда salt.txt является одной строкой, но если есть больше строк, это терпит неудачу. Я читал, что это может сделать PERL. Но я не знаю как. Не могли бы вы помочь мне?

4
задан 30 March 2015 в 16:52

4 ответа

Другой perl путь:

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

ключ здесь /e regexp опция, разрешающая нам использовать perl результат команды как строка замены.

1
ответ дан 30 March 2015 в 16:52

Если Вы хотите придерживаться bash, выбрать символ, который не появляется ни в Вашей строке, ни в Вашем файле, скажем, @; тогда:

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

Этот путь перед заменой эти newline символы в Вашей строке изменяются на @ и после замены эти @, символы возвращаются к newlines, так, чтобы SALT больше не рассматривался как массив, но как переменную, содержащую длинную строку.

1
ответ дан 30 March 2015 в 16:52

Можно сделать это:

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

то, Где salt.txt соль, wp-config.php, является входным файлом, и SALT строка для замены

1
ответ дан 30 March 2015 в 16:52
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.
треть берет параметры командной строки в качестве имен файлов, читает файлы линию за линией и заменяет строку.

0
ответ дан 30 March 2015 в 16:52

Другие вопросы по тегам:

Похожие вопросы: