LoginSignup
0
0

More than 1 year has passed since last update.

【一行野郎】コロン「:」区切りによる最短一致と最長一致の取り出し

Posted at

概要

コマンドラインやシェルスクリプトで稀に必要になる最短マッチと最長マッチ.
特に最短マッチについては使う度に苦戦しているので書き出しておく.
実践例は、sed, awk, cutコマンド, perl である.

なお、私には正規表現を正確に覚える力が無いので、パターンの意味については別途調べてほしい.

最短一致

文字列「1A:2B:3C:4D」をコロン「:」区切りにする.
このときの最短一致である「1A」を取り出す場合.

sed

$ echo "1A:2B:3C:4D" | sed -n -r 's/([^:]+):(.+)/\1/p'

awk

$ echo '1A:2B:3C:4DF' | \
    awk '{ $0 = gensub(/[(.+):](.+)+/, "\\\\2", "G", $0); print $0 }'

cut コマンド

$ echo '1A:2B:3C:4D' | cut -f1 -d':'

perl

$ echo '1A:2B:3C:4D' | perl -pe 's/([^:]+):(.+)/\1/'

最長一致

文字列「1A:2B:3C:4D」をコロン「:」区切りにする.
このときの最長一致である「1A:2B:3C」を取り出す場合.

sed

$ echo "1A:2B:3C:4D" | sed -n -r 's/(.+):(.+)/\1/p'

awk

$ echo '1A:2B:3C:4DF' | \
    awk '{ $0 = gensub(/(.+):(.+)+/, "\\\\1", "G", $0); print $0 }'

cut コマンド

$ echo '1A:2B:3C:4D' | cut -f1-3 -d':'

perl

$ echo '1A:2B:3C:4D' | perl -pe 's/(.+):(.+)/\1/'

以上.

0
0
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
0