Sed одинарные кавычки - PullRequest
       4

Sed одинарные кавычки

4 голосов
/ 14 декабря 2011

Я пытался избежать проблемы с одинарной кавычкой, используя SED (оболочка Bash).

Мне нужно сделать

$cfg['Servers'][$i]['password'] = '';

в

$cfg['Servers'][$i]['password'] = 'mypassword';

То, что я пробовал, это:

sed -i "s/$cfg['Servers'][$i]['password'] = '';/$cfg['Servers'][$i]['password'] = '$rootpassword';/g" /usr/share/phpmyadmin/libraries/config.default.bak

Что в итоге приводит в замешательство.

$cfg['Servers'][$i]['password['Servers'][]['passsword'] = 'mypassword'

Я пробовал '\' ', чтобы избежать одиночных кавычек, и я думаю, что все остальное под солнцем, но просто не могу получить это совсем там.

Кто-нибудь может указать на мою вероятную очевидную ошибку?

Спасибо.

Ответы [ 3 ]

13 голосов
/ 15 декабря 2011

вместо экранирования, вы можете использовать \x27 для одинарных кавычек.это работает не только для sed, для awk и т. д.

см. тест:

kent$  cat tt
$cfg['Servers'][$i]['password'] = ''

kent$  sed -r 's/(\$cfg\[\x27Servers\x27\]\[\$i\]\[\x27password\x27\] \= \x27)\x27/\1mypassword\x27/g' tt
$cfg['Servers'][$i]['password'] = 'mypassword'

обратите внимание, что линия sed может быть не лучшим решением для вашей проблемы, например, putвся строка в "s /../" может не понадобиться.Однако я просто хочу показать, как работал \ x27.

4 голосов
/ 14 декабря 2011
$ sed -i "s/\$cfg\['Servers'\]\[\$i\]\['password'\] = '';/\$cfg['Servers'][\$i]['password'] = '\$rootpassword';/g" file
1 голос
/ 14 декабря 2011

Попробуйте это:

sed -i "/Servers.*password.*''$/s/''/'foo'/" /path/to/your/testfile

Сопоставьте строку, содержащую «что-нибудь .. Серверы .. что-нибудь .. пароль .. что-нибудь .. ''" (оканчивается на '') и в этой строке замените '' на 'foo'

Это может соответствовать более чем одной строке, но будет изменен только первый вхождение. Проверьте это, наиболее вероятно, что .. Servers .. password .. '' находится только на одной строке.

Или вы можете просто избежать всего.

...