Bash Sed Найти и заменить специальными символами - PullRequest
3 голосов
/ 25 февраля 2012

Я пытаюсь найти {AUTH-KEYS-SALTS} в файле wp-config.php и заменить его содержимым переменной bash keysalts.

keysalts=`curl -sS https://api.wordpress.org/secret-key/1.1/salt/`
sed -i "s/{AUTH-KEYS-SALTS}/$keysalts/g" wp-config.php

Следующее почти работает, за исключением того, что keysaltsимеет множество специальных символов, таких как $ `; '", а sed запутывается. По сути, как мне избежать всего и просто заменить {AUTH-KEYS-SALTS} на $ keysalts?

Спасибо.

Ответы [ 4 ]

3 голосов
/ 25 февраля 2012

Другим способом может быть использование perl:

perl -i -pe '
  BEGIN { 
    $keysalts = qx(curl -sS https://api.wordpress.org/secret-key/1.1/salt) 
  } 
  s/{AUTH-KEYS-SALTS}/$keysalts/g
' wp-config.php
2 голосов
/ 25 февраля 2012

Вы можете избежать $keysalts, используя сам sed:

sed -i "s/{AUTH-KEYS-SALTS}/`echo $keysalts | sed -e 's/[\/&]/\\&/g'`/g" wp-config.php

См. этот вопрос для получения дополнительной информации.

1 голос
/ 25 февраля 2012

На самом деле, мне нравится это один лучше

sed -i 's/{AUTH-KEYS-SALTS}/'"$keysalts"'/g' wp-config.php

Личный выбор. : -)

0 голосов
/ 30 декабря 2015

Оказывается, вы задаете не тот вопрос.Я тоже задал не тот вопрос.Причина, по которой это неправильно, - начало первого предложения: «В моем скрипте bash ...».

У меня был тот же вопрос и я допустил ту же ошибку.Если вы используете bash, вам не нужно использовать sed для замены строк (и гораздо удобнее использовать функцию замены, встроенную в bash).

Вместо:

  keysalts=`curl -sS https://api.wordpress.org/secret-key/1.1/salt/`
  sed -i "s/{AUTH-KEYS-SALTS}/$keysalts/g" wp-config.php

Вы можете использовать исключительно функции bash, считывая файл в переменную, заменяя текст в переменной и записывая замененный текст обратно в файл:

  INPUT=$(<wp-config.php)
  keysalts="$(curl -sS https://api.wordpress.org/secret-key/1.1/salt/)"
  echo "${INPUT//'{AUTH-KEYS-SALTS}'/"$keysalts"}" >wp-config.php
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...