
У меня есть эта строка в файле test.php
'dbs_password' => 'a8b*cyP0',
и хотите заменить на:
'dbs_password' => 'password-here',
Поэтому я использую эту sed
команду с синтаксисом:
$ sed -e "s:'dbs_password' => 'a8b*cyP0',:'dbs_password' => 'password-here':" -i test.php
Однако он не меняется/не заменяется.
Я был бы признателен, если бы кто-нибудь мог поделиться знаниями о том, как правильно использовать sed
такой код?
решение1
Проблема в том, что *
в регулярных выражениях означает 0 or more of the preceeding character
, а не означает литерал *
. Чтобы сопоставить *
, вам нужнопобегэто. Например:
sed -i "s:'dbs_password' => 'a8b\*cyP0',:'dbs_password' => 'password-here':" test.php
Однако это неоправданно сложно. Если вы хотите заменитьвсе случаистроки a8b*cyP0
с password-here
, вы можете просто сделать:
sed -i "s:a8b\*cyP0:password-here:" test.php
Если вы хотите заменитьтолькоте строки, которые соответствуют dbs_password
, делают:
sed -i "s:\(.*dbs_password.*\)'a8b\*cyP0':\1'password-here':" test.php
Последний вариант используетзахват шаблоначтобы избежать повторной печати одного и того же шаблона.