【问题标题】:Using Sed To Search/Replace Variable In Bash Script使用 Sed 搜索/替换 Bash 脚本中的变量
【发布时间】:2014-06-08 16:10:50
【问题描述】:

我正在尝试通过使用 Sed 将前几天的日期替换为当前日期来更改文本文件第一行中的日期。

以下是我试图用来完成此任务的 bash 脚本中的代码:

YMD=$(date +%Y%m%d)

ODA=$(date -u +%Y%m%d --date="1 days ago")

mv ${HOMEDIR}/${PATH1}/nws_${VAR}_conus_daily_${ODA}.ctl ${HOMEDIR}/${PATH1}/nws_${VAR}_conus_daily_${YMD}.ctl

sed "s/${ODA}/${YMD}/" ${HOMEDIR}/${PATH1}/nws_${VAR}_conus_daily_${YMD}.ctl

URL1=http://water.weather.gov/${VAR}/p_download_new/${Y}/${M}/${D}/nws_${VAR}_conus_${YMD}.nc

wget -P ${HOMEDIR}/${PATH1}/ -N ${URL1}

文本文件的第一行内容如下:

dset ^grads/data/ahps/nws_precip_conus_20140423.nc

【问题讨论】:

  • 你的 sed 有什么问题?
  • 你能显示cat -vte file.txt的输出吗?

标签: bash unix ubuntu sed


【解决方案1】:

使用这个:

sed "1s/[0-9]\+\.nc/$(date +%Y%m%d).nc/" file.txt

它将file.txt第一行中.nc之前的数字替换为

date +%Y%m%d

以所需格式输出当前日期。


功能证明

file.txt 如下:

dset ^grads/data/ahps/nws_precip_conus_20140421.nc
bla bla 20140421.nc

发出上述命令:

sed "1s/[0-9]\+\.nc/$(date +%Y%m%d).nc/" file.txt

输出:

dset ^grads/data/ahps/nws_precip_conus_20140423.nc
bla bla 20140421.nc

您会在第一行看到日期,并且只有那个已被当前日期替换。

【讨论】:

  • 嗨,我尝试使用该代码,但它仍然拒绝在第一行将前几天的日期更改为当前日期......目前,我有这个:sed "1s/ [0-9]\+\.nc/$(日期 +%Y%m%d).nc/" ${HOMEDIR}/${PATH1}/nws_${VAR}_conus_daily_${YMD}.ctl跨度>
  • 我想知道为什么这对我不起作用...这是完整的 bash 脚本:paste2.org/1Yh8LcDp您发现任何可能导致它不起作用的东西吗?
  • 谢谢。我还应该提到,我只是能够让您的示例在终端中工作,但是它不会改变实际文件中的行...
【解决方案2】:

如果您希望 sed 更改您的文件,您必须提供 -i 选项,如下所示:

sed -i "s/${ODA}/${YMD}/" ${HOMEDIR}/${PATH1}/nws_${VAR}_conus_daily_${YMD}.ctl

否则sed 只会将更改后的文件输出到标准输出。

【讨论】:

  • 嗨,Sigi!在 sed 命令之后添加“-i”选项就像一个魅力!谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-08-02
  • 2011-12-02
  • 2021-11-20
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
相关资源
最近更新 更多