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

时间:2013-07-19 03:21:06

标签: bash append line echo

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

echo "string" > /folder/file.txt

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

echo "string" >> /folder/file.txt

第二个示例附加到文件,将字符串写在新行上。

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

3 个答案:

答案 0 :(得分:6)

假设你有GNU头:

$ head -n -1 file

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

答案 1 :(得分:5)

{ echo 1; echo 2 ; echo 3 ; } | sed  '$d'

<强>输出

1
2

或使用文件

 sed '$d' file > file.tmp && mv file.tmp file

OR与较新的seds

sed -i '$d' file

$ char作为范围地址值,表示“last-line-in-file”。您还会看到$在正则表达式中使用,例如'/ at Line $ /'(注意'/.../'的reg-exp分隔符对)。在reg表达式中使用时,$现在意味着'行尾'

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

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

echo $lineCount 

IHTH

答案 2 :(得分:2)

以下是使用awk

执行此操作的方法
$ seq 1 5 | awk 'NR>1{print l}{l=$0}'
1
2
3
4

使用perl

$ seq 1 5 | perl -ne 'print if !eof'
1
2
3
4

或者如果你喜欢井字游戏! (使用tacsed):

$ seq 1 5 | tac | sed '1d' | tac
1
2
3
4