使用Sed在Bash脚本中搜索/替换变量

使用Sed在Bash脚本中搜索/替换变量,bash,unix,ubuntu,sed,Bash,Unix,Ubuntu,Sed,我试图通过使用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}/$

我试图通过使用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 "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\u precip\u conus\u 20140421.nc
bla bla 20140421.nc
发出上述命令:

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

dset^grads/data/ahps/nws\u precip\u conus\u 20140423.nc
bla bla 20140421.nc

您可以看到第一行中的日期,只有该日期已被当前日期替换。

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

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

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

您的sed有什么问题?能否显示
cat-vte file.txt的输出?
?您好,我尝试使用该代码,但它仍然拒绝将前几天的日期更改为第一行中的当前日期。。。目前,我得到了这个:sed“1s/[0-9]\+\.nc/$(日期+%Y%m%d).nc/“${HOMEDIR}/${PATH1}/nws{VAR}{u conus\u daily{YMD}。我想知道为什么这对我来说不起作用。。。下面是完整的bash脚本:您是否发现了任何可能导致此操作不起作用的因素?谢谢。我还应该提到,我只是能够让你的样本在终端工作,但它不会改变实际文件内的行…嗨,Sigi!在sed命令后添加“-i”选项非常有效!非常感谢。