从另一个包含换行符的文件中读取gsed replacement命令

时间:2015-07-14 17:17:55

标签: sed

这有点奇怪。我正在使用gsed编辑云配置文件,然后再将其推送到服务器。由于某种原因,当我尝试将文件打印到替换字符串时,gsed(gnu-sed)会抛出错误。各种逃避方法似乎都不起作用,这是相当令人沮丧的。任何人都可以看到这里有什么问题吗?

  1. 将证书文件读入变量

    CERT =`cat ../$1/tmp/$1-cert.csr |读我的时候;回声$ i; done`

  2. 替换云配置文件:

    gsed -i" / write_files:/ a \ - path:/home/core/$1-cert.csr\n permissions:0755 \ n owner:core:core \ n content:| \ n`printf '%S \ n' \" $ CERT \"`" ../$ 1 / TMP /云config.yaml

  3. 错误:

    gsed: -e expression #1, char 168: unknown command: `M'
    

    M恰好是cert文件第二行的第一个字符:

    -----BEGIN CERTIFICATE REQUEST-----
    MIICvjCCAaYCAQAweTELMAkGA1UEBhMCVUsxFzAVBgNVBAgMDkdyZWF0ZXIgTG9u
    

1 个答案:

答案 0 :(得分:0)

我最终使用了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