shell:删除/保留文件中的指定行

将文件file1中第一行到含有word字符的行删除,并重定向到文件file2:

sed  '1,/word/d' file1 > file2

将文件file1中含有word字符的行保留,并重定向到文件file2,-n表示结果不打印到屏幕:

sed -n '/word/p' file1 > file2

将文件file1中>=21行的内容删除,-i表示直接将更改保存在file1:

sed -i '21,$d'  file1

多个条件用分号隔开:

sed  '1,/word1/d;21,$d;/word2/d'  file1 > file2

 

转载于:https://www.cnblogs.com/seaBiscuit0922/p/7576204.html

<think>好的,我现在需要帮用户写一个Shell脚本,用来查找并删除/var/log目录下超过7天的.log文件。首先,我得确认用户的需求是什么。他们可能是在管理服务器,需要定期清理日志文件,避免磁盘空间被占满。用户可能对Shell脚本有一定了解,但可能不太熟悉find命令的具体用法,或者想自动化这个过程。 接下来,我应该考虑如何实现这个功能。最常用的方法是使用find命令,因为它可以根据文件的修改时间和其他条件来搜索文件。find命令的-mtime选项可以用来指定天数,+7表示7天以前的文件。然后,通过-exec参数执删除操作。不过,用户可能需要一个脚本,而不仅仅是单命令,这样方便定期执,比如通过cron任务。 然后,我需要确保这个脚本的安全性和可靠性。直接使用rm命令删除文件是有风险的,特别是如果脚本有错误的话,可能会误删重要文件。因此,在脚本中加入一些安全措施是必要的,比如先打印出要删除文件,确认无误后再实际删除,或者在脚本中设置一个“试运”模式。 另外,用户可能希望脚本能够记录操作日志,这样他们可以查看哪些文件删除了,什么时候删除的。所以,添加日志功能也是一个好主意。同时,考虑到不同系统的环境可能不同,比如有的系统可能使用/bin/bash,有的可能使用/bin/sh,所以脚本的shebang要写清楚。 还需要处理可能出现的错误情况,比如目录不存在或者权限不足。在脚本中检查/var/log目录是否存在,以及用户是否有权限操作,这样可以避免脚本运时报错。此外,处理带有空格或特殊字符的文件名,需要使用适当的引号来包裹变量,避免解析错误。 用户可能还想知道如何定时执这个脚本,比如使用crontab设置每天自动运。所以在给出脚本之后,建议用户配置cron任务,并说明如何添加。同时,提醒用户在生产环境中谨慎操作,可以先进试运,确认无误后再实际删除文件。 最后,总结整个脚本的结构,确保每一步都有注释说明,方便用户理解和修改。可能还需要考虑扩展性,比如用户以后想修改保留天数或者日志路径,脚本应该允许通过变量来配置这些参数,而不是硬编码在命令里。 综上所述,我需要编写一个结构清晰、安全可靠、具备日志功能和错误处理的Shell脚本,并给出使用说明和注意事项,确保用户能够安全有效地管理他们的日志文件。</think>以下是一个实现日志文件清理的Shell脚本详细解决方案,包含安全验证和日志记录功能: ```bash #!/bin/bash # 日志清理脚本 - 自动删除/var/log下超过指定天数的.log文件 # 作者:运维安全助手 # 版本:v1.2 ####################################### # 配置区(按需修改) ####################################### LOG_DIR="/var/log" # 目标目录 FILE_PATTERN="*.log" # 文件匹配模式 RETENTION_DAYS=7 # 保留天数 DRY_RUN=false # 试运模式(true时只显示不删除) LOG_FILE="/var/log/cleanup.log" # 操作日志路径 ####################################### # 函数定义:记录带时间戳的日志 ####################################### log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE } ####################################### # 前置检查 ####################################### # 检查root权限 if [ "$(id -u)" -ne 0 ]; then log "错误:需要root权限执此脚本" exit 1 fi # 检查目标目录存在性 if [ ! -d "$LOG_DIR" ]; then log "错误:目标目录 $LOG_DIR 不存在" exit 1 fi ####################################### # 主清理流程 ####################################### log "===== 开始日志清理任务 =====" log "扫描目录: $LOG_DIR" log "文件模式: $FILE_PATTERN" log "保留天数: $RETENTION_DAYS" [ $DRY_RUN = true ] && log "模式:试运(不实际删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值