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

Bash脚本输出气压与日期间出现换行的原因排查

问题描述

编写了一个小型Bash脚本,从指定网站获取当前气压并存入变量,希望在气压后添加当前日期并写入类CSV文件。但气压与日期间始终存在换行,尝试用sed或tr '\n'去除换行无效;怀疑wget执行过晚导致echo提前执行,添加&&连接所有命令后问题依旧。使用Linux系统,请问思路哪里出错了?

PS:首次尝试使用sed,写法肯定可以优化;)

原始脚本:

#!/bin/bash

luftdruck=$(wget 'https://www.fg-wetter.de/aktuelle-messwerte/' -O aktuell.html && cat aktuell.html | grep -A 0 hPa | sed -e 's/<[^>]*>//g' | sed -e '/^-/d' | sed -e '/title/d' | sed -e 's/ hPa//g')

datum=$(date) 

echo -e "${luftdruck} ${datum}"  >> ausgabe.txt
问题分析与解决

核心问题

不是wget执行时机的问题,而是luftdruck变量本身包含多余换行符。你的提取逻辑通过grep和sed处理后,输出的内容不止一行(可能包含空行或无关文本行),导致变量里自带换行,echo时自然会在气压和日期之间换行。

优化方案

简化提取逻辑,确保只获取单行的气压数值,同时合并冗余的sed命令,提升效率:

优化后的脚本

#!/bin/bash

# 直接下载页面内容并提取气压数值,避免临时文件
luftdruck=$(wget -qO- 'https://www.fg-wetter.de/aktuelle-messwerte/' | grep -oP '\d+(?= hPa)' | head -n1)

# 可指定日期格式,让CSV更规范,比如:datum=$(date +"%Y-%m-%d %H:%M:%S")
datum=$(date) 

# 用逗号分隔符合CSV格式,避免空格干扰
echo "${luftdruck},${datum}" >> ausgabe.txt

关键改进点

  1. wget -qO-:静默模式(-q)直接将页面内容输出到标准输出(-O-),省去临时文件和cat的多余步骤。
  2. 精准匹配气压值:用grep -oP '\d+(?= hPa)'通过Perl正则只提取hPa前的数字,避免提取到无关HTML文本或换行。
  3. head -n1:确保只取第一行匹配结果,彻底避免变量混入多行内容。
  4. CSV格式规范:用逗号分隔气压和日期,符合类CSV文件的格式要求,同时避免空格带来的潜在问题。
  5. 去掉echo -e:无需转义字符,避免意外解析变量中的特殊字符。

额外建议

  • 若网站HTML结构发生变化,正则表达式可能失效,需要重新调整匹配规则。
  • 可替换wget为curl:curl -s 'https://www.fg-wetter.de/aktuelle-messwerte/',效果一致。
  • 给date指定明确格式(如date +"%Y-%m-%d %H:%M:%S"),让CSV中的日期更统一易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:35:22