Shell脚本 - 如何将数据插入特定行的单独文件中?

时间:2013-07-20 15:19:18

标签: bash shell awk

在以下shell脚本中,如何将${today}插入到第4行的单独的现有文件index.html中? (index.html中的1-3行已有一些代码。第4行为空。第5行-EOL有一些HTML代码。)

#!/bin/sh
Today=$(date "+%Y.%m.%d-%H.%M.%S")

#insert ${today} into a separate existing file (index.html) in line 4
#<to-do>

2 个答案:

答案 0 :(得分:2)

sed实用程序可以在特定行插入文本。这可能不是表达它的最佳方式;它会覆盖它在第4行找到的任何东西。

Today=$(date "+%Y.%m.%d-%H.%M.%S")
sed -i -e "4s/^.*$/$Today/" index.html

-i参数告诉sed进行编辑 - 它有效地覆盖了输入文件。我认为这个选项使得sed比awk更适合您的问题。要进行测试,请删除-i参数,然后它将写入stdout。

如果你希望这个只用 ,如果第4行是一个空白行(没有空格,没有字符),请改用它。

Today=$(date "+%Y.%m.%d-%H.%M.%S")
sed -i -e "4s/^$/$Today/" index.html

答案 1 :(得分:2)

我会使用awk

awk 'NR==4 {print strftime("%Y.%m.%d-%H.%M.%S", systime())} 1' file

如果您不想在awk内生成日期字符串,也可以传入变量:

Today=$(date "+%Y.%m.%d-%H.%M.%S")
awk -vtoday=$Today 'NR==4 {print today} 1' file