他のウェブサイトで提案された回答を見つけましたgrep -oP '^\w+|$
。私はこれがPCREに意味がないことを指摘しました|$
。これは単に「ORの終わり」を意味するからです。したがって、これは常に通常の行の場合です。しかし、grep
GNU 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
フラグはありません。
どうなりますか? - o
0個の長さの一致を無視しますか?これはバグですか、それとも予想されますか?
ベストアンサー1
私のGNU grepのマニュアルページは次のとおりです。
-o、--matchのみ
一致するものだけを印刷する(空ではない) はラインの一部と一致し、各部分は別々の出力ラインにあります。
ポイントは私です。
私は行末のマッチングを「ヌルマッチング」と見なしていると思います。