использование GNU SED для комментирования строки и добавления новой строки

использование GNU SED для комментирования строки и добавления новой строки

Допустим, я хочу отредактировать файл /etc/ssh/sshd_config в RHEL 7, чтобы защитить нашу конфигурацию SSH.

Я хочу заменить, например, строку Ciphers, оставив оригинал на месте и закомментировав его. Я также хочу иметь возможность вырезать ключ из наименьшей части строки, чтобы Red Hat не ломал ее каждый раз, когда обновляет rpm / install iso.

Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc

должно стать...

#Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
Ciphers abc-123,def-456,ghi-789 etc...

Я попытался найти / добавить новую строку в тестовом файле, где имя файла testfile, а содержимое This is my test file. Я попытался добавить No it's not как новую строку и потерпел неудачу.

sed -i '/This is my test file./aNo it's not.' testfile

Как бы я это сделал и, что еще важнее, какие ключевые концепции за этим стоят?

решение1

Я попробовал команду sed ниже, и она сработала просто чудесно.

команда

sed -i '/^Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-c/s/.*/#&\nCiphers abc-123,def-456,ghi-789/g' filename

выход

#Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
Ciphers abc-123,def-456,ghi-789

решение2

sed -i -n 'p; s/^Ciphers/#&/p' /etc/ssh/sshd_config

-iна месте

-nничего не печатает, если явно не напечатано

/pв конце строки поиска принудительно выполняет печать, фактически переопределяя -nсовпавшую строку

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