如何使用TR或sed的一个YAML文件来替换换行符单行字符串“\ n”

问题描述 投票:0回答:1

我使用的是bash shell,然后试图处理文本文件一行字符串为“\ n” S取代换行符。例:

源文件:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LOOOONG-STRING
    server: https://1.2.3.4:8443
  name: cluster-name
contexts:
- context:
    cluster: cluster-name
    user: cluster-admin
  name: cluster-admin@cluster-name
current-context: cluster-admin@cluster-name
kind: Config
preferences: {}
users:
- name: cluster-admin
  user:
    client-certificate-data: LOOOONG-STRING
    client-key-data: LOOOONG-STRING

所需的输出

apiVersion: v1\nclusters:\n- cluster:\n    certificate-authority-data: LOOOONG-STRING\n    server: https://1.2.3.4:8443\n  name: cluster-name\ncontexts:\n- context:\n    cluster: cluster-name\n    user: cluster-admin\n  name: cluster-admin@cluster-name\ncurrent-context: cluster-admin@cluster-name\nkind: Config\npreferences: {}\nusers:\n- name: cluster-admin\n  user:\n    client-certificate-data: LOOOONG-STRING\n    client-key-data: LOOOONG-STRING

我在这里尝试了很多TR和sed例子,不能把它做。谢谢。

sed tr
1个回答
0
投票

尝试这个:

sed -e :a -e '$!N;s/\n/\\\n/;ta' file

使用GNU sed中,您可能需要逃避新的生产线只有一次:

sed -e :a -e '$!N;s/\n/\\n/;ta' file

所有行会连接起来,并与\\\n更换新行字符。

您可以添加-i标志编辑文件到位或将输出重定向到一个新的文件:

sed -e :a -e '$!N;s/\n/\\\n/;ta' file > newfile
© www.soinside.com 2019 - 2024. All rights reserved.