sed не работает должным образом при попытке заменить "user = 'mysql'" на "user =` whoami` " - PullRequest
1 голос
/ 27 января 2020

Сбой следующей команды.

sed 's/user=\'mysql\'/user=`whoami`/g' input_file

Пример input_file содержит следующую строку

user='mysql'

Соответствующий ожидаемый результат:

user=`whoami`

( Да, я буквально хочу whoami между обратными чертами, я не хочу, чтобы он расширял мой идентификатор пользователя.)

1 Ответ

1 голос
/ 27 января 2020

Это должно быть то, что вам нужно:

  • Использование двойных кавычек для включения команды sed,
  • , чтобы вы могли использовать в ней одинарные кавычки;
  • избегайте обратных кавычек, чтобы избежать расширения.
sed "s/user='mysql'/user=\`whoami\`/g" yourfile

Я намеренно опустил опцию -i по той простой причине, что она не является частью проблемы.

Чтобы выяснить связь между одинарными кавычками и экранированием, сравните следующие две команды

  • echo 'I didn\'t know'
  • echo 'I didn'\''t know'

Первая будет дождитесь дальнейшего ввода, так как есть открытое ', тогда как последнее будет работать нормально, так как вы объединяете одну строку в кавычках ('I didn'), экранированную одинарную кавычку (\') и другую строку в одинарных кавычках ('t know').

...