在与sed匹配后添加换行符分隔的字符串



我试着用sed在一个命令中编辑大的文本文件

我尝试做的是执行sed并将某个字符串替换为相同的字符串并添加换行符+字符串,因此我可以添加文本。

示例命令:

sed -i "s/openssl_verify_mode: 'none'/openssl_verify_mode: 'none'n&  domain: 'test.net'n&   user_name: 'admin'n&   password: 'mypassword'/g" /var/www/test-pro/config/configuration.yml

i use n&获取换行符。我做错了什么/我必须写什么?

sed有一个append命令,您可以使用该命令在匹配后添加文本:

sed -e "/openssl_verify_mode: 'none'/a\
openssl_verify_mode:  domain: 'test.net'\
openssl_verify_mode:  user_name: 'admin'\
openssl_verify_mode:  password: 'mypassword'\
" input-file

但是将新文本添加到文件中并使用read命令可能会更干净:

$ cat > new-text << EOF
openssl_verify_mode:  domain: 'test.net'
openssl_verify_mode:  user_name: 'admin'
openssl_verify_mode:  password: 'mypassword'
EOF
$ sed -e "/openssl_verify_mode: 'none'/rnew-text" input

如果你想参数化字符串"openssl_verify_mode"(即,如果您想使用不同的字符串),在shell级别进行操作。如:

$ s="openssl_verify_mode"
$ sed -e "/${s}: 'none'/a\
$s:  domain: 'test.net'\
$s:  user_name: 'admin'\
$s:  password: 'mypassword'\
" input

我强烈反对-i,并从答案中省略了它。如果你喜欢,可以随意滥用它。

最新更新