5行目から空白行を削除する方法

5行目から空白行を削除する方法

私はこれを持っています:

sed -i '/^$/d' temp_spec.rb

これは空の行を削除し、うまく機能します。 5-999行(またはファイルの終わりの5行)に対してのみこれを行うにはどうすればよいですか?

私は試した:

sed -n5,999 -i '/^$/d' temp_spec.rb
sed '5,999!d/^$/d' temp_spec.rb

ただし、どちらも機能しません(エラーなし)。

ベストアンサー1

5行目から始めてすべての空行を削除し、1行から4行を維持するには、次のようにします。

sed -i '5,${;/^$/d;}' temp_spec.rb

{グループ化演算子なので、最初のコマンドは「一致するまで5,${5行目からinput()の終わりまで$次のコマンドを実行します}」を意味します。{との間の命令には}アドレスが前に付くこともあるので、内部命令は「/^$/d行の先頭( )と終わり( )の間に何もなければ削除する」という意味です。 sedコマンドは区別できます。 (これはsedの正しく文書化されていない機能です。ほとんどのsed実装はこれをサポートしますが、^$;完全にポータブルではない.) Haukeが指摘したように、;後者{はオプションですが、前者}は必須です。

5行目から始まるすべての空行を削除し、1行から4行を削除するには、次の方が簡単です。

sed -i '1,4d;/^$/d' temp_spec.rb

おすすめ記事