我有10,000行的文件。使用以下命令,我将删除第10,000行之后的所有行。

sed -i '10000,$ d' file.txt

但是,现在我想删除前X行,以便文件不超过10,000行。

我认为应该是这样的:
sed -i '1,$x d' file.txt

其中$x是超过10,000的行数。我对如何编写if,然后编写它的一部分有些困惑。或者,我以为我可以使用原始命令,并以相反的方式cat该文件?

例如,如果我们只想从底部开始3行(经过一些有用的回答,看起来似乎更简单):

输入:
Example Line 1
Example Line 2
Example Line 3
Example Line 4
Example Line 5

预期产量:
Example Line 3
Example Line 4
Example Line 5

当然,如果您知道一种更有效的编写命令的方法,那么我也会对此持开放态度。非常感谢您的积极投入。

最佳答案

为简单起见,我将反转文件,保留前10000行,然后重新反转文件。

它使原地保存文件变得更加复杂

source=file.txt
temp=$(mktemp)
tac "$source" | sed '10000 q' | tac > "$temp" && mv "$temp" "$source"

在不反转文件的情况下,您可以计算行数并进行一些算术运算:
sed -i "1,$(( $(wc -l < file.txt) - 10000 )) d" file.txt

关于linux - 如何基于文件中的最小行删除前X行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40556140/

10-11 22:34
查看更多