如何将文字“*”与 sed 匹配?

如何将文字“*”与 sed 匹配?

我的文件中有这一行名为 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并不意味着文字*。为了匹配 a *,您需要逃脱它。例如:

sed -i "s:'dbs_password' => 'a8b\*cyP0',:'dbs_password' => 'password-here':" test.php

然而,这不必要地复杂。如果你想更换所有出现的情况的字符串,您可以简单地执行以下操作a8b*cyP0password-here

sed -i "s:a8b\*cyP0:password-here:" test.php

如果你想更换仅有的那些匹配dbs_password, 的行执行以下操作:

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

最后一个利用模式捕捉以避免将相同的图案打印两次。

相关内容