次のコマンドは期待どおりに機能します。ケース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
ても一致する行はテストされません。addr2
addr2
addr1
最後の「注意」は、現在見ている動作を説明します。走るとき
printf "a\nb\nc\n" | sed -n '/a/,/a/ p'
sed
一致し、再一致する/a/
までパターンスペースをコピーし続けます。/a/
他の回線で、これは決して起こらないでしょう。