Linux 在bashshell中查找并替换

Linux 在bashshell中查找并替换,linux,bash,shell,Linux,Bash,Shell,请建议使用最新日期和时间替换变量 这是我的要求 FN='basename$0' TS=`date '+%m/%d/%Y %T'` QD='08/27/2014 16:25:45' 然后我要运行一个查询。在它运行之后,我需要获取$TS(当前系统日期和时间)并将其作为值分配给$QD变量。这是一个循环过程,每次脚本运行时都会更新 我尝试过使用sed,但没有成功 请提供帮助。尽管您没有提到您希望实现的总体目标,但我觉得这样做比使用sed更新现有脚本文件更可靠 FN='basename$0' TS

请建议使用最新日期和时间替换变量

这是我的要求

FN='basename$0'

TS=`date '+%m/%d/%Y %T'`

QD='08/27/2014 16:25:45'
然后我要运行一个查询。在它运行之后,我需要获取
$TS
(当前系统日期和时间)并将其作为值分配给
$QD
变量。这是一个循环过程,每次脚本运行时都会更新

我尝试过使用sed,但没有成功


请提供帮助。

尽管您没有提到您希望实现的总体目标,但我觉得这样做比使用
sed
更新现有脚本文件更可靠

FN='basename$0'

TS=date '+%m/%d/%Y %T'

# Load the latest QD (from the last run)
[ -e ~/.QD.saved ] && QD="`cat ~/.QD.saved`"
QD='08/27/2014 16:25:45'
…稍后在该文件中

#Save the new QD variable
echo '$(date +$FORMAT)'" > ~/.QD.saved

虽然我不确定sed是否是您正在寻找的工具,但我相信您的命令必须是这样的:

sed -i -r 's/^QD=.*/QD="$TS"/g' "$FN"
我假设您使用的是gnu sed,它与-I选项一起指示执行就地替换,而不是将输入行复制到模式空间


好吧,希望能有所帮助。

通过编程修改脚本以获得不同的时间戳常量绝对是处理此问题的错误方法

相反,当您想标记查询已完成时,只需触摸一个文件:

touch lastQueryCompletion
…如果您想知道上次完成查询的时间,请检查该文件的时间戳:

# with GNU date
QD=$(date -r lastQueryCompletion '+%m/%d/%Y %T')

# or, with Mac OS X stat
QD=$(stat -t '%Y/%m/%d %H:%M:%S' -f '%Sm' lastQueryCompletion)

你能发布你试过的sed命令吗?嗯<代码>QD=“$TS”?或者你的意思是什么?虽然这是在shell脚本中…但请发布您的代码以进行调整。“#sed”s/^QD=.*/QD=“$TS”/g”“$FN”#echo$QD | sed-e”s/^QD=./^QD=“$TS”/g”“$FN”“目标是检查数据库查询是否有错误。执行查询后,QD值必须更新为最新值,因此当脚本再次运行时,需要在执行equalry后花费一段时间。我不理解您的问题。您刚刚将当前日期指定给了
TS
——再次指定给
QD
有什么困难。另外,我建议使用
QD=$(日期+%Y%m%d-%H%m%S)
生成一个易于排序的日期代码。查询需要在执行之前的时间内运行。脚本每15分钟运行一次