我有一个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
苹果
梨
香蕉
胡萝卜
浆果
我们可以删除文件的倒数第二行:
一个。不基于任何字符串/模式。
湾基于模式 - 如果倒数第二行包含“胡萝卜”
答案 0 :(得分:5)
这可能适合你(GNU sed):
sed -i 'N;$!P;D' file
这在模式空间中设置了两行的窗口,然后每当第二行不是最后一行时打印第一行。始终打印最后一行,因为无法获取下一行。
可以使用以下方法删除基于模式的文件的倒数第二行:
sed -i 'N;$!P;${/pattern.*\n/!P};D'
答案 1 :(得分:4)
我知道这是一个老问题,但由于我没有看到我使用的内容,我会添加它以防万一。
将sed
与tac
结合起来非常简单:
mv file.txt file.txt.bak
tac file.txt.bak | sed '2d' | tac > file.txt
这将删除文件的倒数第二行。它不是一个“纯粹的”sed
解决方案,它需要一个中间文件,但我经常使用它,因为恕我直言,它更容易理解。