使用sed删除倒数第二行的文件

时间:2016-07-20 16:44:19

标签: sed delete-row

我有一个file.txt,我必须删除该文件的倒数第二行。 以下三个sed命令能够打印倒数第二行。但我需要删除该行。任何帮助?

sed -e '$!{h;d;}' -e x file.txt

sed -n 'x;$p' file.txt

sed 'x;$!d' file.txt

$ cat file.txt
苹果

香蕉
胡萝卜
浆果

我们可以删除文件的倒数第二行:
一个。不基于任何字符串/模式。
湾基于模式 - 如果倒数第二行包含“胡萝卜”

2 个答案:

答案 0 :(得分:5)

这可能适合你(GNU sed):

sed -i 'N;$!P;D' file

这在模式空间中设置了两行的窗口,然后每当第二行不是最后一行时打印第一行。始终打印最后一行,因为无法获取下一行。

可以使用以下方法删除基于模式的文件的倒数第二行:

sed -i 'N;$!P;${/pattern.*\n/!P};D'

答案 1 :(得分:4)

我知道这是一个老问题,但由于我没有看到我使用的内容,我会添加它以防万一。

sedtac结合起来非常简单:

mv file.txt file.txt.bak
tac file.txt.bak | sed '2d' | tac > file.txt

这将删除文件的倒数第二行。它不是一个“纯粹的”sed解决方案,它需要一个中间文件,但我经常使用它,因为恕我直言,它更容易理解。