You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请教Linux中sed命令参数-e '1,1d'的具体作用

没问题,我来帮你拆解这个sed命令里的1,1d到底是什么意思,顺便把整个备份删除逻辑串起来讲清楚~

先搞懂sed -e '1,1d'的作用

首先,-e参数确实是用来告诉sed要执行的编辑脚本,这个你已经查到了。重点看后面的1,1d:

  • 1,1:这是sed的行范围表达式,表示“从第1行开始,到第1行结束”——说白了就是精准选中第1行。
  • d:这是sed的删除命令,作用是删除当前选中的行。

合起来,1,1d就是删除输入内容的第1行。你可能会疑惑,为什么不直接写1d?其实效果是完全一样的,1d也是删除第1行,1,1d只是用范围写法明确指定了单行范围而已,两种写法在这个场景下没有区别。

结合你的备份脚本理解整个流程

你的完整命令是:

ls -t | sed -e '1,1d' | xargs -d '\n' rm

我们一步步拆解逻辑:

  1. ls -t:按文件的修改时间从新到旧排序输出文件名,所以第一行就是最新的那个备份文件。
  2. sed -e '1,1d':把ls -t输出的第一行(最新备份)删掉,剩下的都是比最新备份旧的文件。
  3. xargs -d '\n' rm:把剩下的文件名传给rm命令,一次性删除这些旧备份(-d '\n'是指定换行符作为分隔符,避免文件名里有空格时出错)。
额外补充几个小提示
  • 其实sed这里完全可以简化成sed '1d',效果一模一样,写1,1d只是更啰嗦的写法而已。
  • 用ls来处理文件名其实有潜在风险(比如文件名包含特殊字符、换行符等),如果要更安全,推荐用find命令结合时间参数来处理备份轮换,比如:
    find /path/to/backups -type f -mtime +7 -delete
    
    这个命令会删除7天前的备份文件,比ls+sed的组合更可靠。

内容的提问来源于stack exchange,提问作者algorhythm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:12:04