使用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'
我知道这是一个老问题,但由于我还没有看到我使用的是什么,所以我会添加它以备不时之需。
将 sed
与 tac
结合使用非常简单:
mv file.txt file.txt.bak
tac file.txt.bak | sed '2d' | tac > file.txt
这将删除文件的 second-to-last 行。它不是 "pure" 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'
我知道这是一个老问题,但由于我还没有看到我使用的是什么,所以我会添加它以备不时之需。
将 sed
与 tac
结合使用非常简单:
mv file.txt file.txt.bak
tac file.txt.bak | sed '2d' | tac > file.txt
这将删除文件的 second-to-last 行。它不是 "pure" sed
解决方案,它需要一个中间文件,但我经常使用它,因为恕我直言,它更容易理解。