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

时间:2014-04-23 17:04:48

标签: 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}/" ${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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

使用此:

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

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

的输出
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

您会看到第一行中的日期仅被当前日期替换。