
私の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
、リテラル を意味しないことです*
。 にマッチさせるには*
、逃げるたとえば、次のようになります。
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
最後のはパターンキャプチャ同じパターンを2回印刷しないようにするためです。