
我的檔案中有這一行名為 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
最後一個利用模式捕捉以避免將相同的圖案列印兩次。