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

使用awk和sed修改neofetch uptime输出失败求助

解决neofetch uptime替换失败的问题

常见错误原因

  • awk语法错误:如果你的命令替换写成uptime_val=$(neofetch uptime | awk {print $2 $3}),awk的脚本部分没有用单引号包裹,shell会把{print}当成要读取的文件,因此报错“无法读取{print}”。正确写法必须用单引号包裹awk指令:awk '{print ...}'。
  • sed变量替换的引号问题:若用单引号包裹sed替换命令(如sed 's/$uptime_val/.../'),shell不会展开变量$uptime_val;若用双引号,变量中的空格会被shell拆分,导致sed匹配失败。
  • 匹配模式太具体:手动执行时用了固定的30 mins作为匹配目标,但脚本运行时系统uptime可能变化,导致sed找不到匹配项,替换自然不生效。

可靠的解决方法

方法1:直接用sed匹配uptime行并替换(推荐)

不需要提前提取当前uptime,直接匹配uptime:开头的行,替换后面的所有内容:

# 替换完整neofetch输出中的uptime行
neofetch | sed 's/^\(uptime: \).*/\113.7 billion years/'

# 仅替换neofetch单独输出的uptime内容
neofetch uptime | sed 's/^\(uptime: \).*/\113.7 billion years/'

如果你的neofetch uptime输出格式是up X mins/hours/days,调整sed匹配规则即可:

neofetch uptime | sed 's/^\(up \).*/\113.7 billion years/'

方法2:用awk直接替换时间部分

awk的字符串替换功能更灵活,能匹配各种时间格式(分钟、小时、天):

neofetch uptime | awk '{gsub(/[0-9]+ (mins|hours|days)/, "13.7 billion years"); print}'

方法3:正确提取变量后替换(不推荐,易出问题)

如果一定要先提取uptime值,需正确处理空格和引号:

# 正确提取uptime的时间部分(假设输出是"uptime: 30 mins")
uptime_val=$(neofetch uptime | awk '{print $2 " " $3}')
# 用双引号包裹sed命令,确保变量展开,同时转义特殊字符(如果有的话)
neofetch uptime | sed "s/$uptime_val/13.7 billion years/"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 15:53:23