Допустим, я хочу отредактировать файл /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
совпавшую строку