Shell 使用变量搜索文件名并替换为另一个变量

Shell 使用变量搜索文件名并替换为另一个变量,shell,unix,sed,awk,Shell,Unix,Sed,Awk,我在一个变量($AUD_DATE)中搜索字符串,在另一个变量($YEST_DATE)中替换字符串。我需要使用$AUD_DATE搜索文件夹中的文件名,然后将其替换为$YEST_DATE 我试着使用这个链接来做这件事,但它不能处理变量。 我需要的实际输出是 mv "NULRL.PREM.DATA.CLRSFIFG.140101.dat" "NULRL.PREM.DATA.CLRSFIFG.140124.dat" mv "NULRL.PREM.DATA.CLRTVEH.140101.dat" "N

我在一个变量($AUD_DATE)中搜索字符串,在另一个变量($YEST_DATE)中替换字符串。我需要使用$AUD_DATE搜索文件夹中的文件名,然后将其替换为$YEST_DATE

我试着使用这个链接来做这件事,但它不能处理变量。

我需要的实际输出是

mv "NULRL.PREM.DATA.CLRSFIFG.140101.dat" "NULRL.PREM.DATA.CLRSFIFG.140124.dat" 
mv "NULRL.PREM.DATA.CLRTVEH.140101.dat" "NULRL.PREM.DATA.CLRTVEH.140124.dat"

提前感谢方法1

我通常使用sed创建mv命令,然后通过管道将输出传输到sh。这种方法允许我查看将提前执行的命令

例如:

$ AUD_DATE=140101
$ YEST_DATE=140124
$ ls -1tr | grep "${AUD_DATE}" | sed "s/\(.*\)/mv \1 \1_${YEST_DATE}"
一旦您对上一个命令的输出感到高兴;重复该操作并将其输出到sh,如下所示:

$ ls -1tr | grep "${AUD_DATE}" | sed "s/\(.*\)/mv \1 \1_${YEST_DATE}" | sh
方法2

您可以使用xargs命令

ls -1tr | grep ${AUD_DATE}" | xargs -I target_file mv target_file target_file${YEST_DATE}

你链接的答案似乎有很多有用的例子。你的“实际输出”看起来是错误的。@glennjackman:updated actual output.Thx@rishabh。但是第一种方法有一些解析错误,第二种方法没有提供所需的o/p。它只是在文件名后面加上$YEST_DATE。
ls -1tr | grep ${AUD_DATE}" | xargs -I target_file mv target_file target_file${YEST_DATE}