2016-12-04 6 views
3
sed 'N; D' testfile 

で期待通りに動作しないテストファイルが含まれています'N' と 'D' はsedの

this is the first line 
this is the second line 
this is the third line 
this is the fourth line 

私はRHEL 6を使用していますが、出力はとして提供されます:

私の1として
this is the fourth line 

Nは次の行をパターンスペースに引っ張り、Dはパターンスペースの最初の行だけを削除します。したがって、出力は次のようになります。

this is the second line 
this is the fourth line 

出力が上記のようになっている理由を説明してもらえますか? the documentationによると

答えて

4

:dコマンドが発行されたかのようにパターンスペースには何の改行が含まれていない場合

D

、通常の新しいサイクルを開始します。それ以外の場合は、最初の改行までパターン・スペース内のテキストを削除し、新しい入力行を読み取らずに結果のパターン・スペースを使用してサイクルを再始動します。最後の行だけが中に残っている、その時点で、これは、入力がなくなるまでのラインを読み、削除、最初からあなたのsedプログラムを再起動してしまうようですね

(重点鉱山。)

、バッファ。

+0

..TL; DR:RTFM .. – stevesliva

1

すでに示されているように、Dはプログラムの先頭に移動します。

sed -n 'n;p' 

とオッズを印刷するには:ただし偶数ラインを印刷するには、以下を使用することができます

sed 'n;d' 
GNUで

はあなたが使用することもできセッド:

sed '0~2!d' # Odd 
sed '1~2!d' # Even 

選択肢は何かすることができlike:

N;s/^[^\n]*\n// 

w hichは次の行をパターンスペースに読み込み、最初のものを置き換えます。

なぜこれが動作であるのかと聞かれるかもしれません。一つの理由は、パターン空間の乗算ラインでの作業、このようなことを可能にすることです:

$!N;/\npattern$/d;P;D 

上記のパターンだけでなく、前の行に一致する行を削除します。

関連する問題