什么是从文件中替换值的sed命令?

时间:2016-04-20 17:18:18

标签: regex sed

从文件替换下一行的sed命令是什么。 我使用下面的sed命令来替换一行,但它没有用

sed -i 's/^fixed-address 135.250.187.128;\nfilename "vxrom.pxe.mg.latest";$/fixed-address 135.250.187.128;\nfilename "vxrom.pxe.mg/' dhcpd.txt 

输入:

host sim127  {hardware ethernet 00:25:90:78:32:B4; fixed-address 135.250.187.127; filename "vxrom.pxe.mg.latest"; next-server 135.250.186.9; }
host sim128  {hardware ethernet 00:25:90:78:2E:FC; fixed-address 135.250.187.128; filename "vxrom.pxe.mg.latest"; next-server 135.250.186.9; }

输出:

host sim127  {hardware ethernet 00:25:90:78:32:B4; fixed-address 135.250.187.127; filename "vxrom.pxe.mg.8_0"; next-server 135.250.186.9; }
host sim128  {hardware ethernet 00:25:90:78:2E:FC; fixed-address 135.250.187.128; filename "vxrom.pxe.mg.latest"; next-server 135.250.186.9; }

1 个答案:

答案 0 :(得分:1)

sed在线上运作。但是您的表达式包含换行符\n。因此,您必须使sed使用多行,并在换行符中中止评估,例如described here。所以尝试使用前缀

  

:一个; N; $ BA;

sed之前的's/.../.../g'表达式中

。我还将.替换为其转义序列\.并附加了g,以便替换所有匹配项。结果如下:

sed -i ':a;N;$!ba;s/fixed-address\n135.250.187.128;\sfilename\s"vxrom.pxe.mg.latest";/fixed-address 135.250.187.128;\ filename "vxrom.pxe.mg";/g' dhcpd.txt