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回印刷するのを防ぎます。