BSD grepがラインアンカーの開始を尊重する方法

BSD grepがラインアンカーの開始を尊重する方法

行の最初の文字を一致させ、その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つのヒットを提供する必要があります。

しかし、この問題がいつ解決されるのかわかりません。

おすすめ記事