如何將文字「*」與 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

最後一個利用模式捕捉以避免將相同的圖案列印兩次。

相關內容