You need to enable JavaScript to run this app. 如何使用sed结合date生成的年内日序变量读取TXT文件对应行
优惠活动
大模型
产品
解决方案
定价
更多

如何使用sed结合date生成的年内日序变量读取TXT文件对应行

按年内日数定位TXT指定行的实现方法

现有脚本的两处关键错误

  • 变量赋值逻辑错误:dat= date +%j的写法只会临时给date命令传入一个空值的dat环境变量,根本不会把date的执行结果保存到dat变量中。正确的命令输出赋值需要使用$()格式的命令替换语法。
  • sed参数的引号使用错误:单引号包裹的内容不会触发bash的变量展开,就算把1p换成$datp放在单引号里,bash也不会解析这个变量,只会把它当成纯文本传给sed。要传入变量拼接的行号参数,必须用双引号包裹sed的命令段。

修正后的可运行脚本

#!/usr/bin/bash
# 获取当前是年内第几日
dat=$(date +%j)
# 按dat对应的行号读取文件内容
arg=$(sed -n "${dat}p" /home/adam/dailyverses.txt)
# 输出读取到的内容
echo "$arg"

运行逻辑说明

  • 执行时bash会先把$dat替换成date +%j返回的数字(比如当前是年内第128天,就会替换成128)
  • 最终传给sed的参数就是128p,和手动写固定行号的打印效果完全一致
  • 去掉了原脚本里多余的cat管道步骤,sed本身支持直接读取目标文件路径,减少不必要的进程开销

注意:如果碰到闰年场景,date +%j在2月29日会返回值60,只要你的dailyverses.txt总行数不小于当年的年内最大日数(平年365、闰年366),脚本就能正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 03:36:04