Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用bash替换一行_Bash_Sed - Fatal编程技术网

使用bash替换一行

使用bash替换一行,bash,sed,Bash,Sed,我有一个文件test.txt和第3行 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.

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

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
会将第一个非空字符作为替换文本的开头,因此前面的任何空格都会被忽略

因此,这是一种解决方法

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

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

为什么你在30分钟前问同样的问题?