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

Delete second-to-last line of file using sed

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

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

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

sed 'x;$!d' file.txt

$猫file.txt
苹果

香蕉
胡萝卜
浆果

我们可以删除文件的倒数第二行吗:
一种。不基于任何 string/pattern.
b.基于模式 - 如果倒数第二行包含 "carrot"

这可能适合您 (GNU sed):

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

这会在模式 space 中设置两行 window,然后在第二行不是最后一行时打印其中的第一行。总是打印最后一行,因为无法获取下一行。

根据模式删除文件的倒数第二行可以通过以下方式实现:

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

我知道这是一个老问题,但由于我还没有看到我使用的是什么,所以我会添加它以备不时之需。

sedtac 结合使用非常简单:

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

这将删除文件的 second-to-last 行。它不是 "pure" sed 解决方案,它需要一个中间文件,但我经常使用它,因为恕我直言,它更容易理解。