GNU grepの-oオプションは長さ0の一致を無視しますか?

GNU grepの-oオプションは長さ0の一致を無視しますか?

他のウェブサイトで提案された回答を見つけましたgrep -oP '^\w+|$。私はこれがPCREに意味がないことを指摘しました|$。これは単に「ORの終わり」を意味するからです。したがって、これは常に通常の行の場合です。しかし、grepGNU PCREで何をしているのかは不明です-o。以下を検討してください。

$ printf 'ab\na\nc\n\n' | perl -ne 'print if /ab|$/'
ab
a
c

$

$(結果に空白行が含まれていることを示すために、2番目のプロンプト()文字が含まれています。)

Perlが期待どおりにすべての行に一致します。 1つを含めるか、行の終わりと一致するabためです。$GNUはフラグなしでgrep同じように動作します-o

$ printf 'ab\na\nc\n\n' | grep -P 'ab|$'
ab
a
c

$

しかし、-o動作が変更されました。

$ printf 'ab\na\nc\n\n' | grep -oP 'ab|$'
ab
$

これは単にgrep forと同じですab。 2番目の部分「OR end of line」は無視されるようです。期待どおりに機能し、-oフラグはありません。

どうなりますか? - o0個の長さの一致を無視しますか?これはバグですか、それとも予想されますか?

ベストアンサー1

私のGNU grepのマニュアルページは次のとおりです。

-o、--matchのみ

一致するものだけを印刷する(空ではない) はラインの一部と一致し、各部分は別々の出力ラインにあります。

ポイントは私です。

私は行末のマッチングを「ヌルマッチング」と見なしていると思います。

おすすめ記事