Wie kann mit sed ein wörtliches „*“ abgeglichen werden?

Wie kann mit sed ein wörtliches „*“ abgeglichen werden?

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 sedBefehl 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 seddieses 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*cyP0mit password-herekö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_passwordFolgendes aus:

sed -i "s:\(.*dbs_password.*\)'a8b\*cyP0':\1'password-here':" test.php

Letzteres verwendetMustererfassungum zu vermeiden, dass dasselbe Muster zweimal gedruckt wird.

verwandte Informationen