行の最初の文字を一致させ、そのgrep
文字だけを印刷しようとしています。 Linuxでは、GNU grep 2.20を使用して次のことを行いました。
$ echo ab | grep -o '^.'
a
$
これは期待どおりに機能します。^
正規表現を行の先頭に固定し、a
文字のみを印刷します。
ただし、MacOSでBSD grep 2.5.1を使用すると、他の結果が表示されます。
$ echo ab | egrep -o '^.'
a
b
$
これは、行^
開始アンカーポイントが無視されるのと同じです。興味深いことに、$
行末のアンカーは両方のスタイルgrep
で期待どおりに機能します。
$ echo ab | grep -o '.$'
b
$
^
興味深いことに、BSD grepはこのオプションが使用されていない場合は行開始アンカーを尊重します。-o
$ { echo a ; echo b; } | grep '^a'
a
$
BSD grepを使用する
^
時期を表現する他の方法はありますか?-o
LinuxとMacOSで利用可能な使用
^
時期を表現する移植可能な方法はありますか?-o
これはBSD grepのバグですか?
答え1
もっと深く掘り下げてこの動作を発見しました。FreeBSDのバグ:
同じバージョンのgrepにはまだいくつかの問題があることがわかりました。関係があるかどうかはわかりませんが、今ここに添付します。
$印刷abc | grep -o '^[ac]'
"a"だけを印刷する必要がありますが、代わりに着信テキストの各文字に3つのヒットを提供する必要があります。
しかし、この問題がいつ解決されるのかわかりません。