繁体   English   中英

如何使用 bash 脚本在文件中的特定单词或行后添加一行?

[英]How can i add a block of line after a specific word or line in a file using bash script?

这是文件内容

  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:

我需要在上面文件内容中的第二行的单词上下文之后添加以下代码块

- context:
       cluster: kubernetes
       namespace: myco-dev
       user: kubernetes-admin
     name: myco/DEV
   - context:
       cluster: kubernetes
        namespace: myco-ua
        user: kubernetes-admin
     name: myco/UA

所以最终的输出应该是这样的

contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
- context:
    cluster: kubernetes
    user: kubernetes-admin
    namespace: myco-dev
  name: myco/DEV
- context:
    cluster: kubernetes
    user: kubernetes-admin
    namespace: myco-ua
  name: myco/UA
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}

我不知道 YAML,根据一些评论,数据来自该类型。 假设数据来自文件,比如说文件 1 和文件 2。 我们可以使用 ed。 (同样我不知道 YAML 或数据来自哪里)

file1 的内容是

  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:

file2 的内容是

- context:
       cluster: kubernetes
       namespace: myco-dev
       user: kubernetes-admin
     name: myco/DEV
   - context:
       cluster: kubernetes
        namespace: myco-ua
        user: kubernetes-admin
     name: myco/UA

将 file2 的内容插入到 file1 中。

 printf '%s\n' '2 r file2' w | ed -s file1

检出file1的内容

cat file1

  name: kubernetes
contexts:
- context:
       cluster: kubernetes
       namespace: myco-dev
       user: kubernetes-admin
     name: myco/DEV
   - context:
       cluster: kubernetes
        namespace: myco-ua
        user: kubernetes-admin
     name: myco/UA
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:

数字 2 是地址又名行号

r afaik 被读取,这意味着读取 file2

w 表示写入。

 man(1p) ed

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM