用bash替换一行

时间:2013-05-30 02:43:45

标签: bash sed

我有一个带有第3行的文件test.txt

start day = 29, 

日期编号29,需要每天更新。最简单的方法是什么?

我试过

line3=" start day =  $(date +"%d"),"

sed -i "3c $line3" test.txt

唯一的问题是“开始”之前的第一个空格没有显示出来。结果是

start day = 29

而不是

start day = 29,

2 个答案:

答案 0 :(得分:1)

你需要逃离一个初始空间。

sed -i~ "3c\ start day = $(date +%d)," test.txt

应该有用。

(请注意,这与bash关系不大,而且与sed有关。)

答案 1 :(得分:0)

首先,变量扩展发生在c命令运行之前,所以你实际上是在运行这样的sed

sed -i "3c  start..." test.txt

c之后某处的反斜杠可能标记替换文本的开头,因此\之后的任何空格都不会被忽略。在没有反斜杠的情况下,我猜sed将第一个非空白字符作为替换文本的开头,因此忽略之前的任何空格。

所以sreservoir's answer是一种解决方法。

或者,由于您只是更新日期,因此您只需更换数字(而不是整行),这样您就不必担心复制该行的其他部分。

sed -i "3s/[0-9][0-9]\?/$(date +%d)/" test.txt