egrep -o

  • GNUの egrep -o はマッチした文字列を出力した後, その文字列を入力文字列から取り除き, 新な行頭にしてしまうバグを持つバージョンがある.
  • echo 'AB'| egrep -o '^(A|B)'の出力は2行あり, 以下になる. 'B'は行頭ではないが, 'A'を出力した時点で'AB'から'A'が取り除かれるため, 行頭の'B'にマッチしている.
A
B
  • echo 'ABAABB' | egrep -o '^(A|B)'は
A
B
A
A
B
B
  • echo 'ABACABB' | egrep -o '^(A|B)'は途中の'C'で食い止められるため,以下の三行.
A
B
A