それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

sed で数字の繰り返しを正規表現で置換するには、文字指定が違う

sed で数値指定する

数字のマッチは、次のようになる。

sed '/[[:digit:]]/'
sed '/[0-9]/'

正規表現に親しんでいると、つぎように \d を書きたくなるが、これは動かない。

sed '/\d/'  # 動かない。

sed で複数桁の数字にマッチさせる。

動かない

sed '/[[:digit:]]+/'

動く

sed '/[[:digit:]]\+/'

元データ:サンプル

nl とfor を使ってぱぱっとデータを作ります。

takuya@bookmarklets$ for e in aaa bbb ccc ; do echo $e; done | nl
     1  aaa
     2  bbb
     3  ccc

sed で行頭の数字を置換してみます。

行番号を sed コマンドで除去を試みてみます。

takuya@bookmarklets$ for e in aaa bbb ccc ; do echo $e; done | nl |  sed  's/[[:digit:]]\+\s\+//g'
     aaa
     bbb
     ccc
takuya@bookmarklets$ for e in aaa bbb ccc ; do echo $e; done | nl |  sed  's/[0-9]\+\s\+//g'
     aaa
     bbb
     ccc
takuya@bookmarklets$ for e in aaa bbb ccc ; do echo $e; done | nl |  sed  's/\d\+\s\+//g'
     1  aaa
     2  bbb
     3  ccc

まとめ

  • \d は動かないので [[:digit:]] or [0-9] を使う
  • + は解釈されないので \+ を使う。

この辺は ed / vi の置換に似てるね。

ちなみに、私が使っているのは gsed ( gnu sed ) です。

2019-05-16 追記

gsed

参考資料

regex - How to match digits followed by a dot using sed? - Super User