他の質問に答えた後、遊ぶことがわかりましたが、sed
同じ結果は出ません.+
。.*
どちらも複数の文字と一致する場合コンテキストアドレスから。
以下のコマンド1:
sed -E '$!N;/(.+)\n\1/!P;D' <<IN
one
one_more
two
two_more
IN
印刷
one_more
two_more
さて、これが予想される結果です。
正規表現をで.+
(.*
すなわち、1つ以上の文字到着0個以上の文字)は同じ結果を提供する必要がありますが、次の結果はそうではありません。
sed -E '$!N;/(.*)\n\1/!P;D' <<IN
one
one_more
two
two_more
IN
1行だけ印刷
two_more
ここで何が起こっているのでしょうか?
1:シンプルさと読みやすさのためにEREを使用しています。 BREでも同様です。
ベストアンサー1
これは/(.*)\n\1/
単純な改行文字も一致するために発生します(\n
空白文字列、改行文字、同じ最初から始めるのは空の文字列です)。
one_more\ntwo
したがって、あなたの例でも文字列と一致します。
sed -E '$!N;/^(.+)\n\1/!P;D'
これを防ぐために、または同じ正規表現を固定する必要がありますsed -E '$!N;/^(.*)\n\1/!P;D'
。