ファイルの最後まで、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