在我的Bash脚本中,我将行写入文本文件。
echo "string" > /folder/file.txt
上面的示例创建了一个新文件,并将该字符串写入该文件。
echo "string" >> /folder/file.txt
第二个示例附加到文件,将字符串写在新行上。
我的问题是......是否有一个命令可以删除最后一行?如果没有,我想我必须逐行复制到一个临时文件中,在我要删除的最后一行之前停止,然后用新文件覆盖旧文件(现在没有最后一行) 。如果这是唯一的解决方案,有没有办法找出文本文件中有多少行?所以我可以在“n - 1”处停止循环。
答案 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
或者如果你喜欢井字游戏! (使用tac
和sed
):
$ seq 1 5 | tac | sed '1d' | tac
1
2
3
4