sed、コンテキストアドレス範囲に対して同じ動作はありますか?

sed、コンテキストアドレス範囲に対して同じ動作はありますか?

次のコマンドは期待どおりに機能します。ケース1、2:

$ printf "a\nb\nc\n" | sed -n '/a/ p'
a

$ printf "a\nb\na\n" | sed -n '/a/,/a/ p'
a
b
a

ただし、次のコマンドは「a」にのみ一致すると予想しましたが、両方のアドレス範囲のレコード定義を理解できませんでした。

状況3、4:

$ printf "a\nb\nc\n" | sed -n '/a/,/a/ p'
a
b
c

$ printf "a\nb\nc\n" | sed -n '/b/,/b/ p'
b
c

誰でもこの定義の動作をより詳細に説明できますか?

SED Command: [addr[,addr]f[args]

$名sed

"... 2番目のアドレスがコンテキストアドレスの場合、sedは最初のアドレスと一致するパターン空間に2番目のアドレスを再一致させません。始めます。

ありがとう

ベストアンサー1

重要な部分は次のとおりです。

sed は、2 番目のアドレスを最初のアドレスと一致するパターン空間と再一致させません。

引用の最後の部分はやや混乱しています。私が持っているマンページ:

アドレス範囲に注意する3つの点:構文は次のとおりですaddr1,addr2(つまり、アドレスはカンマで区切られています)。前の行を選択しaddr1 ても一致する行はテストされません。addr2addr2addr1

最後の「注意」は、現在見ている動作を説明します。走るとき

printf "a\nb\nc\n" | sed -n '/a/,/a/ p'

sed一致し、再一致する/a/までパターンスペースをコピーし続けます。/a/他の回線で、これは決して起こらないでしょう。

おすすめ記事