Macのsedで単語境界の正規表現を利用する方法

2022.10.13
  • t_o_dと申します。
  • 業務等でsedを利用する際に、単語として置換処理を行うことは多いです。
  • その際に利用できる正規表現として単語境界を表す\bがありますが、Mac標準のsedでは対応していません。
  • そこで今回はMac標準のsedで単語境界の正規表現を利用する方法を記録します。

環境

  • mac OS Monterey 12.3.1

結果

  • 結果の記述は以下の通りです。
    • ※Mac標準のsed以外(GNU等)では動作しない場合があります。
# 例 : データ1
$ cat data1

30,50,100,150,250
40,50,150,50,250

# データ1の中から50のみを70へ置換。
$ cat data1 | sed 's/[[:<:]]50[[:>:]]/70/g'

30,70,100,150,250
40,70,150,70,250

# 例 : データ2
$ cat data2

id,name,second_name,score
1,tod,t_o_d,100

# データ1の中からnameのみをfirst_nameへ置換。
$ cat data2 | sed 's/[[:<:]]name[[:>:]]/first_name/g'

id,first_name,second_name,score
1,tod,t_o_d,100

内容

  • 上記の結果例は、任意のデータに対して置換を行う処理です。
  • こちらで利用している方法は、単語を[[:<:]]単語[[:>:]]のように囲むということです。
  • [[:<:]]及び[[:>:]]\bのように単語境界を示す正規表現です。
  • こちらは対象語の前後に英数字かアンダースコアが存在しない時にマッチします。
    • ※そのため日本語には対応していないようです。

参考

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。