从文件中删除最后一行

mtk*_*mtk 74 sed text-processing

sed 用来快速删除具有特定位置的行

sed '1d'
sed '5d'
Run Code Online (Sandbox Code Playgroud)

但是,如果我想删除文件的最后一行并且我不知道行数(我知道我可以使用wc和其他一些技巧来获得它)怎么办。

目前,使用一种解决方法 withheadtail结合 withwc来做到这一点。这里有什么快速曲折吗?

h3r*_*ler 122

在 sed 中$是最后一行,所以要删除最后一行:

sed '$d' <file>
Run Code Online (Sandbox Code Playgroud)

  • 使用 `sed -i '$d' &lt;file&gt;` 就地编辑文件。 (30认同)
  • 删除最后 n 行(其中 n 是任意整数)的作用是什么? (2认同)
  • @JoshuaSalazar ```` for i in {1..N}; 做 sed -i '$d' &lt;文件&gt;; done```` 不要忘记替换````N```` (2认同)
  • 不知怎的,如果没有最高评论的建议,即没有“-i”,你的答案就不起作用。为什么?即我需要 `sed -i '$d' &lt;file&gt;` 。 (2认同)

Gur*_*uru 39

$ 最后一行:

sed '$d' file
Run Code Online (Sandbox Code Playgroud)

  • 击败你 30 秒 :P (13认同)
  • @Rob:`sed '$d' file` 实际上并没有修改文件;它只是打印出文件的内容,减去最后一行。所以`sed '$d' 文件;sed '$d' file` 将打印出文件 *两次* 的内容,每次减去最后一行。等价于`sed '$d' file` 的删除最后两行是`sed '$d' file | sed '$d'`。 (4认同)
  • 是的,这很不雅,但当然有效。我会用`sed -n '1{h;n;}; 一次性完成。$q; X; p;'`。我撅嘴说我们不能只做`sed '$-1,$d'`。 (2认同)

Ema*_*erg 15

cat file.txt | head -n -1 > new_file.txt

请注意,似乎取决于最后一行file.txt(如果以EOF, 或\n然后结尾EOF),在此命令之后的行数new_file.txt可能与 相同(与file.txt)相同(没有 时会发生这种情况\n) - 在任何情况下,最后一行的内容被删除。

另请注意,您必须使用第二个(中间)文件。如果你 cat 并重定向到同一个文件,你会删除它。

  • 在这行得通的地方,它也可以是简单的 `head -n -1 file.txt &gt; new_file.txt`。请注意,`head -n` 的负计数仅适用于 `head` 的某些实现。例如,它不适用于 FreeBSD 或 BusyBox 版本的 `head`。 (7认同)

jas*_*ard 7

Linux

$ 是最后一行,d 表示删除:

sed '$d' ~/path/to/your/file/name
Run Code Online (Sandbox Code Playgroud)

苹果系统

相当于 sed -i

sed -i '' -e '$ d' ~/path/to/your/file/name
Run Code Online (Sandbox Code Playgroud)


Nil*_*ils 6

head --lines=-1. 我首先在 SLES11SP2 系统 (coreutils-8.12-6.23.1) 的手册页中偶然发现了这种可能性

tail并且headcoreutils-rpm 的一部分(至少对于基于 rpm 的系统而言)。

根据 coreutils 的变更日志,从 coreutils-version 5.0.1 开始支持此语法

坏消息:根据 RH5-man-page 这个选项没有被描述

好消息:它适用于 RH5(所以在您的情况下:它适用 - 至少适用于当前版本的 RH5)。

rpm -q coreutils 向我展示(在 CentOS 5.8 上):coreutils-5.97-34.el5_8.1

不知道是不是RH5.5。已经有支持它的 coreutils-version。但是 5.5 无论如何都有 EoLed。