删除文本文件的最后一行,而不是附加一行?

Pao*_*olo 3 bash append line echo

在我的Bash脚本中,我将行写入文本文件.

echo "string" > /folder/file.txt
Run Code Online (Sandbox Code Playgroud)

上面的示例创建一个新文件并将该字符串写入该文件.

echo "string" >> /folder/file.txt
Run Code Online (Sandbox Code Playgroud)

第二个示例附加到文件,将字符串写入新行.

我的问题是......是否有一个命令删除最后一行?如果没有,我想我必须逐行复制到一个临时文件中,在我要删除的最后一行之前停止,然后用新文件覆盖旧文件(现在没有最后一行) .如果这是唯一的解决方案,有没有办法找出文本文件中有多少行?所以我可以在"n - 1"处停止循环.

Die*_*ano 6

假设你有GNU头:

$ head -n -1 file
Run Code Online (Sandbox Code Playgroud)

打印除最后一行(-1)之外的所有行.


she*_*ter 5

{ echo 1; echo 2 ; echo 3 ; } | sed  '$d'
Run Code Online (Sandbox Code Playgroud)

产量

1
2
Run Code Online (Sandbox Code Playgroud)

或者带有文件

 sed '$d' file > file.tmp && mv file.tmp file
Run Code Online (Sandbox Code Playgroud)

或者与较新的seds

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

所述$炭被作为一系列地址值意思是"最后行式文件".您还会看到$在正常表达式中使用过'/ at Line $ /'(注意'/.../'的reg-exp分隔符对).在reg表达式中使用时,$现在意味着'行尾'

如果您真的想知道文件中有多少行(并将其分配给变量),请执行此操作

lineCount=$(/bin/wc -l <file)

echo $lineCount 
Run Code Online (Sandbox Code Playgroud)

IHTH