我的文件中有这一行名为 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*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
最后一个利用模式捕捉以避免将相同的图案打印两次。