我有一个第 3 行的文件 test.txt
start day = 29,
天数 29 需要每天更新。最简单的方法是什么?
我试过了
line3=" start day = $(date +"%d"),"
sed -i "3c $line3" test.txt
唯一的问题是“开始”之前的第一个空格没有出现。结果是
start day = 29
而不是
start day = 29,
您需要转义初始空间。
sed -i~ "3c\ start day = $(date +%d)," test.txt
应该管用。
(请注意,这与 bash 关系不大,而与您的. 文件有关sed
。)
首先,变量扩展发生在c
命令运行之前,所以你实际上是像这样运行 sed
sed -i "3c start..." test.txt
后面某处的反斜杠c
可能标志着替换文本的开始,因此后面的任何空格\
都不会被忽略。在没有反斜杠的情况下,我想sed
将第一个非空白字符作为替换文本的开头,因此之前的任何空格都会被忽略。
所以sreservoir 的答案是解决这个问题的一种方法。
或者,由于您只是更新日期,您可以只替换数字(而不是整行),因此您不必担心复制该行的其他部分。
sed -i "3s/[0-9][0-9]\?/$(date +%d)/" test.txt