Text-Processing

sed 刪除特定行號後的空行

  • February 22, 2021

我正在嘗試刪除第 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

有什麼建議麼?

嘗試:

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

從第 4行開始直到文件末尾,刪除空行。

您的命令的問題是您再次用空字元串替換空行s~^$~~g(與 相同s~^$~~)並且您沒有刪除它。

注意:由於您使用除預設斜杠以外的其他分隔符/,因此要使用此樣式~^$~d,您需要轉義第一個~以說明sed這不是您的正則表達式的一部分:

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

請參閱man sed“地址”下的相關資訊:

\c regexp c 匹配與正則表達式 regexp 匹配的行。c可以是任何字元。


如果您想刪除空行以及僅包含空格(製表符/空格)的行,您可以執行以下操作:

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

引用自:https://unix.stackexchange.com/questions/635804