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

bn31dyow  于 2022-11-23  发布在  Unix
关注(0)|答案(1)|浏览(261)

我试图用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

我使用\n&来获取换行符。我做错了什么/我必须写什么?

hc8w905p

hc8w905p1#

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,并且已经在答案中省略了它。如果你愿意,可以随意滥用它。

相关问题