【问题标题】:how to use tr or sed to replace line breaks in a YAML file to single line string with '\n'如何使用 tr 或 sed 将 YAML 文件中的换行符替换为带有 '\n' 的单行字符串
【发布时间】:2019-06-30 01:53:15
【问题描述】:

我正在使用 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】:

试试这个:

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

【讨论】:

  • 感谢 SlePort!我试过只对文件的一半有效。我应该提到这是一个 YAML 文件,所以它有很多制表符和空格。我用实际格式更新了帖子。为混乱道歉。
  • 我能够让它工作的唯一方法是管道它 5 次: sed "N;s/\n/\\\n/" config | sed "N;s/\n/\\\n/" | sed "N;s/\n/\\\n/" | sed "N;s/\n/\\\n/" | sed "N;s/\n/\\\n/"
  • 您不需要将输出通过管道传送到另一个 sed 命令。请编辑您的帖子,因为不清楚您的预期输出是什么(您想对空格和制表符做什么?)
  • 嗨 SLePort,再次为任何混淆道歉(我的第一个问题!)。我编辑我的原始帖子。我必须保留所有的空格和制表符。这是一个 Kubernetes 配置文件,我必须在我的 bash 脚本中将其从文件转换为字符串,以便通过远程 API 调用发送(仅接受字符串),
  • 你是明星!奇迹般有效!只是一个简短的说明:它在我的 MacOS shell 上运行良好,但由于某种原因,它挂在 CentOS bash shell 上。不知道为什么。
猜你喜欢
  • 2021-10-25
  • 1970-01-01
  • 2020-07-23
  • 2012-11-16
  • 2015-11-21
  • 2020-08-30
  • 2014-03-15
  • 2012-10-15
  • 2019-07-09
相关资源
最近更新 更多