добавление или изменение значения переменной - PullRequest
2 голосов
/ 07 января 2010

Я хочу добавить следующую строку в /etc/my.cnf

Сервер-ID = 1789051

Линия может быть или не быть там. Если он есть, обычно это server-id = 1 Если мой IP-адрес 192.178.90.51, то идентификатор сервера должен быть 1789051

Я хочу знать, может ли это сделать сценарий оболочки или команда.

Ответы [ 3 ]

1 голос
/ 07 января 2010

Это заменит строку в той же позиции в файле, если она существует, а не переместит ее в конец. Если он не существует, он добавит его в конец файла.

sed  '1{x;s/^$/server-id=1789051/;x};/^server-id=/{s/^.*$//;x};${G;s/\n//}' /etc/my.cnf
1 голос
/ 07 января 2010
sed --in-place --expression='$aserver-id=1789051' --expression='/^server-id=/d' \
    /etc/my.cnf
0 голосов
/ 07 января 2010

в одну сторону с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...