区切りが乱れたテキストをPerlで整えてみます。
12345 Spare parts for 2 years shift EUR 223.444,00
45678 Conveyor belt 2 m EUR 223.444,00
35678 thread joint EUR 223.444,00
#m//
でキャプチャしてプリント
コードです。
#!/usr/bin/perl
#パターンマッチを試し、マッチしたらキャプチャした部分をプリント
use strict;
use warnings;
my $regex = '^(\d{5,})\s+(.*)\s+(EUR.*)$'; #1:正規表現パターン
while (my $line = <>) { #2:標準入力から一行ごとに読み込む
if ($line =~ m/$regex/) { #3:行が先ほどのパターンとマッチするか?
print "$1\t$2\t$3" . "\n\n"; #4:マッチしたらキャプチャした箇所をプリント
}
}
1で番号、品名、価格をタブ区切りにします。
2で、標準入力からテキストを読み込みます。
3では、行がパターンとマッチするかどうかを判定します。マッチすればprint
に進みます。
出力です。タブで区切ることができました。
12345 Spare parts for 2 years shift EUR 223.444,00
45678 Conveyor belt 2 m EUR 223.444,00
35678 thread joint EUR 223.444,00
#s///
で置換する
今度はマッチした文字列を置換します。得られる出力は先ほどと同じです。
#!/usr/bin/perl
use strict;
use warnings;
my $regex = '^(\d{5,})\s+(.*)\s+(EUR.*)$';
while (my $line = <>) {
my $line =~ s/$regex/$1\t$2\t$3/;
print "$line\n";
}