假设我想在 RHEL 7 中编辑 /etc/ssh/sshd_config 文件以保护我们的 ssh 配置。
我想替换让我们以 Ciphers 行为例,保留原来的位置并将其注释掉。我还希望能够尽可能地关闭字符串的最小部分,以避免 Red Hat 每次更新 rpm/安装 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 的测试文件中查找/添加换行符,内容是这是我的测试文件。我尝试添加“不,它不是新行”,但惨败。
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
匹配的字符串