#!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,
预计输出:
45frsgf,0,24,23jhjghg,
45frsgf,0,24,23jhjghg,
45frsgf,0,24,23jhjghgif
我运行一个循环然后添加它不应该添加的最后一行,并且该行应该是最后一行而不是第一行。
怎么做?
答案 0 :(得分:2)
sed
脚本包含以下格式的编辑命令:
[address[,address]]function
其中function
表示Editing Commands in sed中列表中的单字符命令动词,后跟任何适用的参数。
该命令前面可以加<blank>
个字符和/或<semicolon>
个字符。该函数可以以<blank>
个字符开头。这些可选字符无效。
基本上,sed
脚本可以用单行写成
[address[,address]]function;[address[,address]]function;...
或以多行形式
[address[,address]]function
[address[,address]]function
...
您实现的功能是s/BRE/replacement/flags
形式的替代功能,其中您的替换包含多行。并且sed
无法将此解释为单个命令。你写道:
s/vtemp =.*/vtemp = (
(0'$v',0,'$n',0x'$g',1,))/
但sed
将此视为两个单独的命令
s/vtemp =.*/vtemp = (
(0'$v',0,'$n',0x'$g',1,))/
第一个命令语法无效(因此错误)。第二个命令也有无效的systax(顺便说一句。注意我删除了前导空格,因为sed
没有解释那些!)
如果您想使用换行符进行替换,则应使用\n
表示换行符。因此
s/vtemp =.*/vtemp = (\n\n (0'$v',0,'$n',0x'$g',1,))/
答案 1 :(得分:0)
使用“\ n”表示换行符:
sed -r -i 's/vtemp =.*/vtemp = (\n\n\n (0'$v',0,'$n',0x'$g',1,))/' $file
如果对引号使用双引号,则不需要内引号:
sed -r -i "s/vtemp =.*/vtemp = (\n\n\n (0$v,0,$n,0x$g,1,))/" $file