使用 GNU SED 注释行并添加新行

使用 GNU SED 注释行并添加新行

假设我想在 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匹配的字符串

相关内容