我试着用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
,并从答案中省略了它。如果你喜欢,可以随意滥用它。