perlで文字列を置換する方法

sedだと最短マッチができないのでperlを使用。

サンプルファイル(string.txt)

string.txt ファイルには以下の文字列が格納されているとします。

abcabc
defdeF
deFdef
ghighi

正規表現にマッチした文字列を置換するコマンドライン入力例

perl -p -e "s/正規表現/置換後の文字列/g" string.txt

置換の例

例. dで始まりfで終わる文字列への最長マッチ(行単位)

$ perl -p -e "s/d.+f/[replaced]/" string.txt
abcabc
[replaced]deF
[replaced]
ghighi

例. 上記の例の大文字小文字を無視

$ perl -p -e "s/d.+f/[replaced]/i" string.txt
abcabc
[replaced]
[replaced]
ghighi

例. 上記の例の最短マッチ

$ perl -p -e "s/d.+?f/[replaced]/ig" string.txt
abcabc
[replaced][replaced]
[replaced][replaced]
ghighi

例. 上記の例でマッチした文字列を置換文字列内で使用

$ perl -p -e "s/d.+?f/[$&]/ig" string.txt
abcabc
[def][deF]
[deF][def]
ghighi

例. 上記の結果を string.txt ファイルに上書きし、元のファイルを string.old ファイルに保存する

$ perl -pi.old -e "s/d.+?f/[$&]/ig" string.txt
$ cat string.txt.old
abcabc
defdeF
deFdef
ghighi