
Ich habe diese Zeile in meiner Datei namens test.php
'dbs_password' => 'a8b*cyP0',
und möchte es ersetzen durch:
'dbs_password' => 'password-here',
Daher verwende ich diesen sed
Befehl mit der Syntax:
$ sed -e "s:'dbs_password' => 'a8b*cyP0',:'dbs_password' => 'password-here':" -i test.php
Es ändert/wird jedoch nicht ersetzt.
Ich wäre dankbar, wenn mir jemand sein Wissen zur richtigen Verwendung sed
dieses Codetyps mitteilen könnte.
Antwort1
Das Problem ist, dass *
in regulären Ausdrücken bedeutet 0 or more of the preceeding character
, dass es nicht wörtlich bedeutet *
. Um ein zuzuordnen *
, müssen SieFluchtes. Zum Beispiel:
sed -i "s:'dbs_password' => 'a8b\*cyP0',:'dbs_password' => 'password-here':" test.php
Dies ist jedoch unnötig komplex. Wenn Sie ersetzen möchtenalle Vorkommender Zeichenfolge a8b*cyP0
mit password-here
können Sie einfach Folgendes tun:
sed -i "s:a8b\*cyP0:password-here:" test.php
Wenn Sie ersetzen möchtennurFühren Sie für die übereinstimmenden Zeilen dbs_password
Folgendes aus:
sed -i "s:\(.*dbs_password.*\)'a8b\*cyP0':\1'password-here':" test.php
Letzteres verwendetMustererfassungum zu vermeiden, dass dasselbe Muster zweimal gedruckt wird.