3

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

echo "string" > /folder/file.txt

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

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

第二个示例追加到文件中,将字符串写入新行。

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

4

3 回答 3

6

假设你有 GNU 头:

$ head -n -1 file

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

于 2013-07-19T03:52:06.667 回答
5
{ echo 1; echo 2 ; echo 3 ; } | sed  '$d'

输出

1
2

或带文件

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

或使用较新的 seds

sed -i '$d' file

char被$视为范围地址值,意思是“文件中的最后一行”。您还将看到$在正则表达式中使用,例如 '/at end of Line$/'(注意 reg-exp 分隔符对 '/.../')。在 reg 表达式中使用时,$现在表示“行尾”

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

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

echo $lineCount 

IHTH

于 2013-07-19T03:29:35.800 回答
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
于 2013-07-19T05:13:28.060 回答