0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

シェルからPerlの正規表現を使って置換してみる

Last updated at Posted at 2017-01-24

区切りが乱れたテキストを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";
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?