Previous: mrjoin 参照ファイルの範囲条件による結合 Up: コマンドリファレンス Next: msel 条件式による行選択 MCMD2
MCMD2 : コマンドリファレンス : msed 正規表現による文字列置換

3.46 msed 正規表現による文字列置換

f=パラメータで指定した項目について、 c=パラメータで指定した正規表現に一致する内容を v=パラメータ指定した文字列で置換する。

書式

msed c= f= v= [-A] [-g] [-W] [i=] [o=] [-assert_diffSize] [-assert_nullin] [-assert_nullout] [-nfn] [-nfno] [-x] [-q] [tmpPath=] [--help] [--helpl] [--version]

パラメータ

f=

置換対象となる項目名リスト(複数項目指定可)を指定する。

c=

置換したい文字列についての正規表現を指定する。

 

正規表現の使用方法参照

v=

c=パラメータで指定した正規表現にマッチした部分文字列が、

 

ここで指定した文字列に置換される。

 

マッチ結果を用いた置換も可能で、指定方法は以下の通り。

 

$& : マッチした文字列

 

$` : 置換対象文字列の先頭から、マッチした文字列の直前までの文字列

 

$' : マッチした文字列の直後から、置換対象文字列の最後までの文字列

 

$N : N番目の部分マッチ文字列(N>=1)

-A

このオプションにより、指定した項目を置き換えるのではなく、

 

新たに項目が追加される。

-g

正規表現にマッチする全ての部分文字列を置換対象とする。

-W

ワイド文字として正規表現による文字列置換を行う。

正規表現の使用方法

c=パラメータで指定する正規表現をTable 3.12からTable 3.15に示す。

Table 3.12: 正規表現1文字マッチ

正規表現

意味

値例

c=,v=例

結果例

.

任意の一文字

abbbcc

c=. v=X -g

XXXXXX

[abc]

a,b,cのいずれか一文字

abbbcc

c=[ac] v=X -g

XbbbXX

[^abc]

a,b,c以外の任意の一文字

abbbcc

c=[^ac] v=X -g

aXXXcc

[a-z]

aからzの範囲の任意の一文字

abbbcc

c=[a-b] v=X -g

XXXXcc

[^a-z]

aからzの範囲外の任意の一文字

abbbcc

c=[^a-b] v=X -g

abbbXX

\t

タブ文字

     

\w

単語構成文字([0-9a-zA-Z_])

ab#cd&ef

c=\w v=X -g

XX#XX&XX

\W

単語構成文字以外

ab#cd&ef

c=\w v=X -g

abXcdXef

\s

空白文字([ \t])

ab cd ef

c=\s v=X -g

abXcdXef

\S

空白文字以外

ab cd ef

c=\s v=X -g

XX XX XX

\d

数字構成文字文字([0-9])

ab12c0

c=\d v=X -g

abXXcX

\D

数字構成文字文字以外

ab12c0

c=\d v=X -g

XX12X0

Table 3.13: 正規表現繰り返し

正規表現

意味

値例

c=,v=例

結果例

a*

aの0個以上の繰り返し

abbbcc

c=ab* v=X

Xcc

a+

aの1個以上の繰り返し

abbbcc

c=ab+ v=X

Xcc

a?

aの0個または1個の出現

abbbcc

c=ab? v=X

Xbbcc

a{M,N}

aのM個以上N個以下の繰り返し

abbbbbcc

c=ab{3,4} v=X

Xbcc

a{M}

aのM個以上の繰り返し

abbbbbcc

c=ab{3} v=X

Xbbcc

a|b

aまたはb

abbbc

c=(ab)|(bc) v=X

XbX

?

繰り返し記号の後ろに付けて最短マッチ

abbbc

c=ab*? v=X

Xbbbc

Table 3.14: 正規表現位置指定

正規表現

意味

値例

c=,v=例

結果例

^

行頭にマッチする

abac

c=^a v=X -g

Xbac

$

行末にマッチする

acac

c=c$ v=X -g

acaX

\b

単語頭または単語末にマッチ

aac ba ac bac

c=\ba v=X -g

Xac bX Xc bac

\B

単語中にマッチ

aac ba ac bac

c=\Ba v=X -g

aXc ba ac bXc

Table 3.15: その他

正規表現

意味

値例

c=,v=例

結果例

(expr)

グループ化

     

\1,..,\9

後方参照

abbcababc

c=(ab)(bc)\1 v=x

Xabc

(?=expr)

exprにマッチする直前位置にマッチ

     

(?!expr)

exprにマッチしない直前位置にマッチ

     

利用例

例1: 基本例

zipCode項目の値が00から始まる4桁文字列を####に置換する。

$ more dat1.csv
customer,zipCode
A,6230041
B,6240053
C,6330032
D,6230087
E,6530095
$ msed f=zipCode c=00.. v=#### i=dat1.csv o=rsl1.csv
#END# kgsed c=00.. f=zipCode i=dat1.csv o=rsl1.csv v=####
$ more rsl1.csv
customer,zipCode
A,623####
B,624####
C,633####
D,623####
E,653####

例2: 項目名指定

zipCodeの値が00から始まる4桁の数字を####に置換し、zipCode4という項目名で出力する。

$ msed f=zipCode:zipCode4 c='00\d\d' v=#### i=dat1.csv o=rsl2.csv
#END# kgsed c=00\d\d f=zipCode:zipCode4 i=dat1.csv o=rsl2.csv v=####
$ more rsl2.csv
customer,zipCode4
A,623####
B,624####
C,633####
D,623####
E,653####

例3: グローバル置換

zipCodeの値が0を全て-にグローバル置換する。

$ msed f=zipCode c=0 v=- -g i=dat1.csv o=rsl3.csv
#END# kgsed -g c=0 f=zipCode i=dat1.csv o=rsl3.csv v=-
$ more rsl3.csv
customer,zipCode
A,623--41
B,624--53
C,633--32
D,623--87
E,653--95

例4: 部分置換

itemの先頭のfruitを削除する。 先頭一致(^)を指定しているので、最後の行のgrapefruitは削除されていないことに注意する。

$ more dat2.csv
item,price
fruit:apple,100
fruit:peach,250
fruit:pineapple,300
fruit:orange,450
fruit:grapefruit,500
$ msed f=item c='^fruit' v= -g i=dat2.csv o=rsl4.csv
#END# kgsed -g c=^fruit f=item i=dat2.csv o=rsl4.csv v=
$ more rsl4.csv
item,price
:apple,100
:peach,250
:pineapple,300
:orange,450
:grapefruit,500

例5: マッチ結果を用いた置換

v=の中で$&を用いれば、マッチした文字列(連続したb)に置き換わる。

$ more dat3.csv
str1
abc
abbc
ac
$ msed f=str1 c='b+' v='#$&#' i=dat3.csv o=rsl5.csv
#END# kgsed c=b+ f=str1 i=dat3.csv o=rsl5.csv v=#$&#
$ more rsl5.csv
str1
a#b#c
a#bb#c
ac

例6: グローバルマッチとの組み合せ

グローバルマッチにすると、個々のマッチ毎にv=の内容が評価される。

$ msed f=str1 c=b v='#$&#' -g i=dat3.csv o=rsl6.csv
#END# kgsed -g c=b f=str1 i=dat3.csv o=rsl6.csv v=#$&#
$ more rsl6.csv
str1
a#b#c
a#b##b#c
ac

例7: プレフィックス置換

$`にて、マッチした箇所の前の文字列(プレフィックス)に置換される。

$ msed f=str1 c=b v='#$`#' i=dat3.csv o=rsl7.csv
#END# kgsed c=b f=str1 i=dat3.csv o=rsl7.csv v=#$`#
$ more rsl7.csv
str1
a#a#c
a#a#bc
ac

例8: サフィックス置換

$'にて、マッチした箇所の後の文字列(サフィックス)に置換される。

$ msed f=str1 c=b v="#$'#" i=dat3.csv o=rsl8.csv
#END# kgsed c=b f=str1 i=dat3.csv o=rsl8.csv v=#$'#
$ more rsl8.csv
str1
a#c#c
a#bc#bc
ac

関連コマンド

mchgstr : 単純な文字列マッチによる置換であればこのコマンドを利用する。

mcal : 正規表現を扱う関数がいくつか用意されている。

Previous: mrjoin 参照ファイルの範囲条件による結合 Up: コマンドリファレンス Next: msel 条件式による行選択 MCMD2