sed は、特定の行番号の後の空の行を削除します。

sed は、特定の行番号の後の空の行を削除します。

ファイルの最後まで、3行目以降のすべての空行を削除しようとしています。

cat ${File}
1

2
3


4

5

5



6
7



8
9


sed -e '3,${s~^$~~g}' ${File}
1

2
3


4

5

5



6
7



8
9

観察する:出力に変化はありません。

希望の出力

1

2
3
4
5
5
6
7
8
9

どんな提案がありますか?

答え1

努力する:

sed '4,$ {/^$/d}' infile

4行目からファイルの終わりまで空白行を削除します。

コマンドの問題は、空の行を空の文字列s~^$~~g(と同じs~^$~~)に置き換え、それを削除しないことです。

注:デフォルトのスラッシュ以外の区切り文字を使用しているため、/このスタイルを使用するには、~^$~d最初の区切り文字をエスケープして正規表現の一部ではないことを~示す必要があります。sed

sed -e '4,${ \~^$~d }' infile

バラよりman sed「住所」から:

\氏正規表現 正規表現 regexp に一致する行に一致します。これどんな文字でも可能です。


空行と空白(タブ/スペース)のみを含む行を削除するには、次のようにします。

sed '4,${ /^[[:blank:]]*$/d }' infile

答え2

別のawk解決策:

awk 'NR<=3||NF' file

これにより、行番号が3以下、または少なくとも1つの「フィールド」(デフォルトでは空白以外の文字が1つ以上で定義されている)を持つすべての行が印刷されます。この方法を使用すると、「テキスト」は含まれませんが、「視覚的に」空の行、つまり空白やタブを含む行を除外することもできます。

答え3

sed '1,3b;/./!d'

範囲 1,3 に分岐するか空白の場合は削除します。

答え4

解決策awk

awk '((NR > 3 && $0!~/^$/) || NR <= 3) { print }' file

関連情報