##やりたいこと
例えば次のようなテキストがあったとする。
test.txt
a('aiueo')
k('kakikukeko')
s('sasisuseso')
t('tatituteto')
このうち、
k('kakikukeko')
s('sasisuseso')
を
h('hogehoge')
f('fugafuga')
b('bar')
に置換したいとする。
つまり、置換後の形は次の通り。
a('aiueo')
h('hogehoge')
f('fugafuga')
b('bar')
t('tatituteto')
##回答例
次のようなperl のプログラムを書いて、
test.pl
#!/bin/perl
my $before = <<'EOS';
k('kakikukeko')
s('sasisuseso')
EOS
my $after = <<'EOS';
h('hogehoge')
f('fugafuga')
b('bar')
EOS
s/\Q${before}\E/${after}/
次のように実行
$ perl -0p test.pl test.txt
a('aiueo')
h('hogehoge')
f('fugafuga')
b('bar')
t('tatituteto')
##解説
- -p : 入力ファイルの各行に対してperlのプログラムを実行する。
- -0 : -p で行のセパレータがヌル文字(\0)になる。つまり、ファイル全体を一度に読み込むことになる。
- "\Q"と"\E": 正規表現のメタ文字である括弧()をエスケープしている
筆者はperlに詳しいわけではないので、他にもっと良い方法を知ってる方がいたら教えていただけると幸いです。
##参考ページ