我正在修改一个包含以下内容的yaml文件:
name: config.php
data:
config.php: <CONFIG_PHP_SECTION>
folder: test
现在,config.php是这样的:
<?php
/* This is a config
*/
$app['env'] = 'sandbox';
$app['db'] = [
'host'=>'localhost'
]
有没有办法可以使用awk或sed或perl来实现这个目标:
name: config.php
data:
config.php: "<?php\n /* This is a config\n */\n $app['env'] = 'sandbox';\n $app['db'] = [\n 'host'=>'localhost'\n ]"
folder: test
我尝试使用CONFIG=$(awk '{printf "%s\\n", $0}' config | tr '"' "\'")
将换行符更改为\ n,然后sed -i "" "s&<CONFIG_PHP_SECTION>&\"$CONFIG\"&" config.yaml
...但是,我得到的只是一个奇怪的<?phpn /* This is a confign */n $app['env'] = 'sandbox';n $app['db'] = [n 'host'=>'localhost'n ]
,一个没有反斜杠的字符串前面的。
我也尝试过使用tr '\n' "\\n"
,但我得到的只是一个实际换行符(打破了yaml文件)
无论如何我真的可以显示并显示并保存到bash中的config.yaml中吗?
由于
P.S。建议的重复“"sed" Insert Backslash to File”对我不起作用...你能详细说明一下吗,@ RobinGreen?谢谢!
当我sed -i "" 's&<CONFIG_PHP_SECTION>&"$CONFIG"&' config.yaml
时,输出为
name: config.php
data:
config.php: "$CONFIG"
folder: test
当我sed -i "" 's&<CONFIG_PHP_SECTION>&"'"$CONFIG"'"&' config.yaml
时,输出与缺少\
的输出相同。
另外...... CONFIG已经是\\n
,它只是最后一个sed命令,\
被删除而n
落后。