【问题标题】:replace block of text in file linux替换文件linux中的文本块
【发布时间】:2020-08-18 17:22:55
【问题描述】:

我想删除文件中的文本块。

文件

      .
      .
      .
 "chromedriver": {
      "version": "80.0.2",
      .
      .
      .
   }
     },
 "ci-env": {
      .
      .
      .

我想删除属性 chromedriver 女巫在多行中定义。

我试过这个:

sed -i 's/"chromedriver"(\s|\n|.)*"ci-env":/"ci-env":/g' file

但它不起作用。有一个oneliner可以解决我的问题吗? sed可以做到吗?

【问题讨论】:

  • 是json文件吗?你能展示更多的内容吗?无论如何,在使用 json 时,jqsedawk 和其他面向行的 unix 工具更适合。

标签: bash sed


【解决方案1】:

使用jq,正如评论中提到的,这是处理 JSON 的更好方法:

jq 'del(.chromedriver)' file > file.tmp && mv -f file.tmp file

(在这里猜测适当的路径,因为您的示例数据太粗略了)

【讨论】:

    【解决方案2】:

    Ed 来救援!

    #!/bin/sh
    
    cat >> edcut.txt << EOF
    /chromedriver/
    ka
    /ci-env/
    -1
    kb
    'a,'bd
    wq
    EOF
    
    ed -s file.json < edcut.txt
    

    如果您想将记录提取到另一个文件,请将 'a,'bd 替换为 'a,'bW newfile.txt。

    【讨论】:

      猜你喜欢
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 2012-11-02
      • 1970-01-01
      • 2010-11-19
      • 2016-09-20
      • 2012-10-14
      相关资源
      最近更新 更多