
Eu tenho esta linha no meu arquivo chamada test.php
'dbs_password' => 'a8b*cyP0',
e deseja substituir em:
'dbs_password' => 'password-here',
Então eu uso este sed
comando com sintaxe:
$ sed -e "s:'dbs_password' => 'a8b*cyP0',:'dbs_password' => 'password-here':" -i test.php
No entanto, ele não muda/é substituído.
Eu apreciaria se alguém pudesse compartilhar algum conhecimento sobre a maneira correta de usar sed
esse tipo de código.
Responder1
O problema é que *
em expressões regulares significa 0 or more of the preceeding character
, não significa literal *
. Para corresponder a *
, você precisaescaparisto. Por exemplo:
sed -i "s:'dbs_password' => 'a8b\*cyP0',:'dbs_password' => 'password-here':" test.php
No entanto, isso é desnecessariamente complexo. Se você quiser substituirtodas as ocorrênciasda string a8b*cyP0
com password-here
, você pode simplesmente fazer:
sed -i "s:a8b\*cyP0:password-here:" test.php
Se você quiser substituirapenasaquelas linhas que correspondem dbs_password
, faça:
sed -i "s:\(.*dbs_password.*\)'a8b\*cyP0':\1'password-here':" test.php
Esse último faz uso decaptura de padrãopara evitar imprimir o mesmo padrão duas vezes.