Использование SED для раскомментирования строки файла конфигурации и замены текста в файле конфигурации Linux

Использование SED для раскомментирования строки файла конфигурации и замены текста в файле конфигурации Linux

Я пытаюсь автоматизировать настройку определенных параметров в моем /etc/ssh/sshd_configфайле, в частности

#PermitRootLogin yes

и

#LoginGraceTime 2m

Они должны читать:

PermitRootLogin no
LoginGraceTime 60

Я не гений написания сценариев, так что, пожалуйста, отнеситесь ко мне с пониманием...

Я попытался sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_configзапустить процесс, но получил странный результат. Он просто выкидывает файл, над которым я пытаюсь работать...

Может ли кто-нибудь объяснить мне, как пользоваться sed?

решение1

Перенаправить вывод во временный файл, затем переименовать временный файл в исходный файл.

sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config > /etc/ssh/sshd_config.tmp && mv -f /etc/ssh/sshd_config.tmp /etc/ssh/sshd_config

Или, если у вас есть GNU, sedвы можете использовать -iопцию редактирования на месте.

sed -i -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config

решение2

Похоже на ответ @Bodo, но это решение оставляет исходную строку нетронутой и добавляет измененную версию под исходной строкой. Это имеет смысл только в том случае, если вы хотите сохранить исходную строку в качестве комментария.

 sed -i'' -n 'p;s/#\(LoginGraceTime\) 2m/\1 60/p;s/#\(PermitRootLogin\) yes/\1 no/p' /etc/ssh/sshd_config

Здесь мы используем одну захватывающую группу \(...\), которая заменяется на \1в замене (потому что нам лень вводить ту же строку снова).

Sed с опцией -nвыводит только явно напечатанные строки, поэтому первая команда pиспользуется для печати немодифицированных строк, а следующие две команды — для печати измененных строк.

Связанный контент