使用 sed 查找单词并将其替换为当前日期,同时使用 .sed 文件并从 .bash 文件调用该 .sed 文件?

使用 sed 查找单词并将其替换为当前日期,同时使用 .sed 文件并从 .bash 文件调用该 .sed 文件?

我有一个 .sed、.bash 和 .txt 文件。

x.bash 文件中有这个

#!/bin/bash

./y.sed "$1"

z.txt 文件中有这个

<dstamp>

y.sed 文件具有此命令来查找 <dstamp> 并将其替换为当前日期

#!/bin/sed -rf
s/<dstamp>/$(date '+%Y%m%d')/g

这是行不通的。它将 <dstamp> 替换为文字 $(date '+%Y%m%d')

运行它

./x.bash z.txt

output: $(date '+%Y%m%d')

但是,该命令在终端中运行良好

sed -r "s/<dstamp>/$(date '+%Y%m%d')/g" z.txt

output: 20221014

如何使该命令在我的 .sed 文件中工作?

答案1

尝试这个。假设 y.sed 文件中只有以下两行。

#!/usr/bin/sed -rf

s/<dstamp>/$(date '+%Y%m%d')/g

更新了搜索字符串并将字符串替换为 x.bash 文件中的变量。如果 y.sed 文件中有任何其他数据,请在 x.bash 文件最后一行的 echo 语句中配置它。这只是一个解决方法。

注意:执行此脚本时有时无法获得输出。请执行4到5次并检查。

下面是x.bash文件

#!/bin/bash

time_data=$(date +'%Y%m%d')
echo "Updating variable values in y.sed script"
str="<dstamp>" date_value=${time_data} envsubst '$str $date_value' < y.sed | tee /root/scripts/y.sed
echo "Setting permission to y.sed file"
chmod 755 /root/scripts/y.sed
./y.sed "$1"
echo -e '#!/usr/bin/sed -rf \n\ns/$str/$date_value/g' > y.sed

下面是 y.sed 文件

#!/usr/bin/sed -rf

s/$str/$date_value/g

以下是z.txt文件中的内容

Test line 1
Test line 2 with <dstamp>
Test line <dstamp> and other data
<dstamp> in Test line 3
New line <dstamp> in line 4
Test line 5

输出:

Updating variable values in y.sed script
#!/usr/bin/sed -rf

s/<dstamp>/20221015/g
Setting permission to y.sed file
Test line 1
Test line 2 with 20221015
Test line 20221015 and other data
20221015 in Test line 3
New line 20221015 in line 4
Test line 5

答案2

如果您已经使用 bash 脚本,则无需创建 sed 脚本。

#!/bin/bash
sed 's/<dstamp>/'"$(date '+%Y%m%d')"'/g' "$1"

相关内容