我有一个file.txt,我必须删除该文件的倒数第二行.以下三个sed命令能够打印倒数第二行.但我需要删除该行.任何帮助?
sed -e '$!{h;d;}' -e x file.txt
sed -n 'x;$p' file.txt
sed 'x;$!d' file.txt
Run Code Online (Sandbox Code Playgroud)
$ cat file.txt
苹果
梨
香蕉
胡萝卜
浆果
我们可以删除文件的倒数第二行:
a.不基于任何字符串/模式.
湾 基于模式 - 如果倒数第二行包含"胡萝卜"
这可能适合你(GNU sed):
sed -i 'N;$!P;D' file
Run Code Online (Sandbox Code Playgroud)
这在模式空间中设置了两行的窗口,然后每当第二行不是最后一行时打印第一行.始终打印最后一行,因为无法获取下一行.
可以使用以下方法实现基于模式删除文件的倒数第二行:
sed -i 'N;$!P;${/pattern.*\n/!P};D'
Run Code Online (Sandbox Code Playgroud)
小智 5
我知道这是一个老问题,但由于我还没有看到我使用的内容,我会添加它以防万一。
结合sed使用tac使这很容易:
mv file.txt file.txt.bak
tac file.txt.bak | sed '2d' | tac > file.txt
Run Code Online (Sandbox Code Playgroud)
这将删除文件的倒数第二行。这不是一个“纯粹的”sed解决方案,它需要一个中间文件,但我经常使用它,因为恕我直言,它更容易理解。