从另一个包含换行符的文件读取时使用gsed replacement命令
这有点奇怪。在将云配置文件推送到服务器之前,我使用gsed编辑云配置文件。由于某种原因,当我试图将文件打印到替换字符串中时,gsed(gnu sed)抛出了一个错误。各种逃跑的方法似乎都不管用,这相当令人沮丧。有人能看出这里出了什么问题吗从另一个包含换行符的文件读取时使用gsed replacement命令,sed,Sed,这有点奇怪。在将云配置文件推送到服务器之前,我使用gsed编辑云配置文件。由于某种原因,当我试图将文件打印到替换字符串中时,gsed(gnu sed)抛出了一个错误。各种逃跑的方法似乎都不管用,这相当令人沮丧。有人能看出这里出了什么问题吗 将证书文件读入变量 CERT=`cat../$1/tmp/$1-CERT.csr |同时读取i;不要重复$i;完成` 在云配置文件中替换: gsed-i“/write\u files:/a \-path:/home/core/$1-cert.csr\n权限:0
gsed: -e expression #1, char 168: unknown command: `M'
M恰好是证书文件第二行的第一个字符:
-----BEGIN CERTIFICATE REQUEST-----
MIICvjCCAaYCAQAweTELMAkGA1UEBhMCVUsxFzAVBgNVBAgMDkdyZWF0ZXIgTG9u
我最终使用了awk:
awk '/write_files:/{print $0 RS "- path: /home/core/certs/'"$1"'-cert.csr" RS " permissions: 0755" RS " owner: core:core" RS " content: |"; while(getline line<"../'"$1"'/tmp/'"$1"'-cert.csr"){print " "line};next}1' ../$1/tmp/cloud-config.yaml > swap.txt && mv swap.txt ../$1/tmp/cloud-config.yaml
awk'/write_files://{print$0 RS“-path:/home/core/certs/'$1'-cert.csr“RS”权限:0755“RS”所有者:core:core“RS”内容:|”;while(getline line1)cert=$(“丑陋”是一种观点。我倾向于同意,但我发现大多数bash脚本本质上都很丑陋。问题中已经定义了输入和所需的输出。如果有更简单的方法来实现相同的结果,我会很感兴趣,但我最好奇的是上面的代码有什么问题。也许我只是瞎了眼,但我不知道t参见“问题中定义的”输入和输出示例。显示您的cloud\u config.yaml
在预期修改之前和之后,以及相应的$1-cert.csr
。我认为您在这里关注的是错误的事情,这很可能是我没有简化问题的错。yaml与此无关,因此$1的值也与此无关。为简单起见,您可以这么说周围的YAML是“Some text”(它实际上是在gsed命令中定义的),$1是“var”。真正的问题是在插入换行符的同时正确地转义嵌入的printf。如果您对此无能为力,那么我感谢您的兴趣,但也许可以转到其他方面。