使用更改的值更改 sed/awk 的值

Change value with sed/awk using value that changes

基本上我需要创建包含一行的多个文件并将该行替换为我从循环中获得的值。也许我的小代码会比我解释得更好。

#!/bin/bash
DATE=$(date +%F -d 2014-06-01)
for echo in {1..5}
do
echo "<TAG></TAG>" > output$echo.xml
done
for i in {1..5}
    do
NEXT_DATE=$(date +%F -d "$DATE + $i month")
SET=$(date +%F -d "$NEXT_DATE + $i month")
sed -i "s|<TAG></TAG>|<TAG>$SET{1..5}</TAG>|" output{1..5}.xml
done

它生成了我 output1.xml, output2.xml ... 我只是不知道如何在 运行 该脚本之后的标签之间添加生成的日期值。期望的输出将是:

output1.xml 包含:

"<TAG>2014-08-01</TAG>"

output2.xml 包含:

"<TAG>2014-10-01</TAG>"

等等。 现在它用生成的日期值 + {1..5} 代替它,如下所示:

<TAG>2014-08-01{1..5}</TAG>

我怎样才能做到这一点?

不需要两个循环或awk。只需将日期放入第一个循环的文件中:

DATE=$(date +%F -d 2014-06-01)
for i in {1..5}
do
    NEXT_DATE=$(date +%F -d "$DATE + $i month")
    SET=$(date +%F -d "$NEXT_DATE + $i month")
    echo "<TAG>$SET</TAG>" > output$i.xml
done