たとえば、Debian または Debian 派生システムのツールを使用すると、空のN*
文字列に一致する次の正規表現を sed で一致させることができます。
$ echo 'Hello' | sed 's/N*/ xx&xx /g'
xxxx H xxxx e xxxx l xxxx l xxxx o xxxx
xxxx
これは、各文字列文字の前の空の一致(つまり、間に文字がない文字列)の正しい結果ですxx&xx
(から6回Hello
。末尾の改行は計算されず、一致しません)。
xx
そして、文字(または文字グループ)が一致すると、および間に表示されますxx
。
$ echo 'Hello' | sed 's/e*/ xx&xx /g'
xxxx H xxexx l xxxx l xxxx o xxxx
しかし、grepの同じ正規表現はいいえ空の文字列と一致します。
$ echo 'Hello' | grep -o 'N*'
しかし印刷します。ただ空でない一致:
$ echo 'Hello' | grep -o 'e*'
e
正規表現の一致を避けるためにgrepに追加の内部ルールがありますかempty
?
ベストアンサー1
grep -o
grep --help
次のように記録
-o, --only-matching show only nonempty parts of lines that match
そしてマニュアルに〜のように
一致する行の一致する(空でない)部分のみが印刷され、各部分は別々の出力行に表示されます。
はい。追加のルールがありますgrep -o
。一致が空でない場合のみ出力されます。
ではecho 'Hello' | grep -o 'N*'
正規表現は一致しますが(戻りコードを表示または使用してわかりますecho 'Hello' | grep 'N*'
)、一致は空であるため何も出力されません。