使用Sed在Bash脚本中搜索/替换变量
我试图通过使用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}/$
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”选项非常有效!非常感谢。