テキストファイルから2番目と3番目の改行文字を削除しますが、最初の改行文字は削除しないでください。

テキストファイルから2番目と3番目の改行文字を削除しますが、最初の改行文字は削除しないでください。

私はmax osx 10.8で開発しており、どのツールを使用するかを好まないかもしれませんが、それはsed重要ではありません。

コメント後の更新: 入力ファイルはWindowsの改行を使用します。これにより、状況が複雑になったら、前処理して改行をLinuxスタイルに変更できます。

Text

Text



text


text

text

私はこのような出力ファイルが欲しい

Text

Text
text
text

text

答え1

awk -vRS='\r\n' -vORS='\r\n' '
  /./||!++n{if (n==1) print "";print;n=0}
  END{if (n==1) print ""}'

答え2

またはPerlバリアント:

perl -e 'undef $/; $_=<>; s/^\n{2,}//mg; print' < infile

設定解除(undef)フィールド区切り記号($/)。これにより、$_=<>STDINの内容がに割り当てられ、次に出力の$_前に2つ以上の改行文字(s/^\n{2,}//mg;)を検索して置き換えますprint(これらの操作はで行われます$_)。上記の検索オプションは改行(複数行)の一致をm許可し、文字列内のすべての項目(最初の項目だけでなく)にパターンを適用します。s///g

2行と3行の新しい行にのみ機能する場合(4本または5本などには影響しません)、以下を使用してください。s/^\n{2,3}//mg;

DOS形式ファイルの場合:

perl -e 'undef $/; $_=<>; s/^(\r\n){2,}//mg; print' < infile

関連情報