添加或更改变量值

时间:2010-01-07 07:14:43

标签: shell sed

我想将以下行添加到/etc/my.cnf

服务器-ID = 1789051

该线可能存在也可能不存在。 如果它在那里,通常是server-id = 1 如果我的IP是192.178.90.51,那么服务器ID应该是1789051

我想知道shell脚本或命令是否可以执行此操作。

3 个答案:

答案 0 :(得分:1)

sed --in-place --expression='$aserver-id=1789051' --expression='/^server-id=/d' \
    /etc/my.cnf

答案 1 :(得分:1)

这将替换文件中相同位置的行(如果存在),而不是将其移动到最后。如果它不存在,它会将它附加到文件的末尾。

sed  '1{x;s/^$/server-id=1789051/;x};/^server-id=/{s/^.*$//;x};${G;s/\n//}' /etc/my.cnf

答案 2 :(得分:0)

使用awk的一种方式

#!/bin/bash
ip=1.2.3.4
awk -v ip="$ip" '/server-id/{
    $0="server-id="ip;f=0
    f=1
    g=1
}
{print}
END{
  if(g==0){ print "server-id="ip  }
}' file
当有“server-id”

时输出

$ more file
1
2
server-id=1
end
$ ./shell.sh
1
2
server-id=1.2.3.4
end
没有“server-id”时输出

$ more file
1
2
end
$ ./shell.sh
1
2
end
server-id=1.2.3.4