使用bash脚本删除文件最后几行
1. 基本思路
使用wc获取文件的行数,并数出开始删除的行号,然后使用sed进行删除。
sed删除基本命令:
sed -i "${n1},${n2}d" filename
其中-i参数是表示直接修改读取的文件内容,而不是输出到终端。
d表示删除命令。
具体sed的教程可以参考:sed原理及使用
2. 实现与验证
新建脚本test.sh并增加执行权限:
#!/bin/bash set -x line=$1 # 新建测试文件 cat > cc <<EOF 1 2 3 4 5 6 7 EOF echo "before deleting" cat cc # 计算需要删除的起始行:文件总行数-需要删除的行数+1 count=$(wc -l cc | awk '{print $1}') # 验证行数是否正确 if [ $line -gt $count ] then echo "too much lines" exit fi from=$(($count-$line+1)) echo "all lines:$count, you want delete:$line, from:$from" sed -i "${from},\$d" cc echo "after deleting:" cat cc
验证:
./test.sh 3 输出: + line=3 + cat + echo 'before deleting' before deleting + cat cc 1 2 3 4 5 6 7 ++ wc -l cc ++ awk '{print $1}' + count=7 + '[' 3 -gt 7 ']' + from=5 + echo 'all lines:7, you want delete:3, from:5' all lines:7, you want delete:3, from:5 + sed -i '5,$d' cc + echo 'after deleting:' after deleting: + cat cc 1 2 3 4
开启了调试,可以看出具体的输出情况,最后正常删除了最后三行,如果删除的行数超过文件的行数则不删除:
./test.sh 30
输出:
+ line=30 + cat + echo 'before deleting' before deleting + cat cc 1 2 3 4 5 6 7 ++ wc -l cc ++ awk '{print $1}' + count=7 + '[' 30 -gt 7 ']' + echo 'too much lines' too much lines + exit
本文版权归作者(https://www.cnblogs.com/harrymore/)和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,如有问题, 可邮件(harrymore@126.com)咨询.
标签:
sed
, bash script
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· 不到万不得已,千万不要去外包
· C# WebAPI 插件热插拔(持续更新中)
· 会议真的有必要吗?我们产品开发9年了,但从来没开过会
· 如何打造一个高并发系统?
· 【译】我们最喜欢的2024年的 Visual Studio 新功能
2018-04-24 dos中的延迟环境变量扩展