我有一个 .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"