在循环中使用sed命令

在循环中使用sed命令,sed,Sed,在追加时,我在文件中得到类似的内容..实际输出 #!bin/bash file=txt.cfg v4=45frsgf n=24 ng=23jhjghg for i in {1..3} do if ( $i == 3 );then sed -i 's/host=.*/host = (\n(0x'$v4',0,'$n',0x'$ng',1,))/' $file else sed -i 's/host=.*/host = (\n(0x'$v4',0,'$n',0x'$ng',1,)),/'

在追加时,我在文件中得到类似的内容..实际输出

#!bin/bash
file=txt.cfg
v4=45frsgf
n=24
ng=23jhjghg
for i in {1..3}
do
if ( $i == 3 );then 
    sed -i 's/host=.*/host = (\n(0x'$v4',0,'$n',0x'$ng',1,))/' $file
else
sed -i 's/host=.*/host = (\n(0x'$v4',0,'$n',0x'$ng',1,)),/' $file
done
预期输出:

45frsgf,0,24,23jhjghg
45frsgf,0,24,23jhjghg,
45frsgf,0,24,23jhjghg,
我运行一个循环,然后添加最后一行它不应该添加的内容,该行应该是最后一行,而不是第一行

如何操作?

使用“\n”表示换行符:

45frsgf,0,24,23jhjghg,
45frsgf,0,24,23jhjghg,
45frsgf,0,24,23jhjghgif
如果外部引号使用双引号,则不需要内部引号:

sed -r -i 's/vtemp =.*/vtemp = (\n\n\n                (0'$v',0,'$n',0x'$g',1,))/' $file

sed
脚本由以下形式的编辑命令组成:

sed -r -i "s/vtemp =.*/vtemp = (\n\n\n                (0$v,0,$n,0x$g,1,))/" $file
其中,
function
表示中列表中的单个字符命令谓词,后跟任何适用的参数

该命令前面可以有
字符和/或
字符。函数前面可以有
字符。这些可选字符应无效

因此,基本上,
sed
脚本可以像

[address[,address]]function
或者以多行形式

    [address[,address]]function;[address[,address]]function;...
您实现的函数是形式
s/BRE/replacement/flags
的替换函数,其中您的替换由多行组成。而
sed
无法将其解释为单个命令。你写道:

[address[,address]]function
[address[,address]]function
...
但是
sed
将其视为两个独立的命令

s/vtemp =.*/vtemp = (

                (0'$v',0,'$n',0x'$g',1,))/
第一个命令的语法无效(因此出现错误)。第二个命令的systax也无效(顺便说一句,请注意,我删除了前导空格,因为
sed
不会解释它们!)

如果要使用换行符进行替换,应使用
\n
指示新行。因此

s/vtemp =.*/vtemp = (
(0'$v',0,'$n',0x'$g',1,))/

sed不喜欢替换命令中的文字换行符。。。如果您的sed支持,请使用
\n
代替。您也可以在您的帖子中的代码标签中发布示例输入和示例输出,我们也可以尝试在相同的方面为您提供帮助。
s/vtemp =.*/vtemp = (\n\n                (0'$v',0,'$n',0x'$g',1,))/