【问题标题】:string replace using sed使用 sed 替换字符串
【发布时间】:2019-02-27 07:26:56
【问题描述】:

我有一个字符串如下。使用 sed 我想在名称后替换值详细信息:“用户”和密码“66666” 输入字符串:

        name: "user"
        value: "55555"
        username: "test"
        value: "77777"
        password : "55555"

预期输出:

        name: "user"
        value: "66666"
        username: "test"
        value: "77777"
        password : "66666"

我尝试了以下方法,但没有成功。它只是替换密码而不是名称后的值

sed -i -e 's/\(password\|name: "[^"]*"{\n}value\): "[^"]*"/\1: "66666"/' test.txt

【问题讨论】:

  • “没有工作”不是我们可以帮助您的问题描述。您的尝试究竟出了什么问题?

标签: linux unix sed


【解决方案1】:

试试这个:

sed -e '/name: *"user"/{' -e ':a;' -e 'N;/password *:/!ba;' -e 's/\(value *: *\)"[^"]*/\1"66666/;s/\(password *: *\)"[^"]*/\1"66666/;}' test.txt
        name: "user"
        value: "66666"
        username: "test"
        value: "77777"
        password : "66666"

sed 是一个流编辑器,默认情况下它分别读取和处理每一行。
这里我使用N 读取并追加下一行,并替换其中的内容。
我删除了-i开关,所以你可以先在shell上测试它,当结果看起来不错时,你可以添加回来。

【讨论】:

  • 是的。密码没有替换您给出的命令。我在下面尝试的命令仅替换密码值。"sed -i -e 's/(password\|name: "[^"]*"{\n}value): "[^"]*"/\1: "66666"/'test.txt"
  • 它没有用,因为它只为价值而做。它还需要替换密码详细信息
  • 它有效。但是我们可以编辑我使用的命令 sed -i -e 's/(password\|name: "[^"]*"{\n}value): "[^"]*"/\1: "66666 "/' test.txt 因为我有很多像密码这样的字要保留
  • @user3755420 你的sed 是什么版本?有些sed不支持|,但是你可以试试。您也可以尝试-E 切换。花点时间阅读man sed,这会有所帮助:)
  • @user3755420 我试过了,好像不是个好主意,因为它会替换第二行value
猜你喜欢
  • 2021-03-01
  • 2020-07-28
  • 2017-02-08
  • 2020-03-13
  • 2012-12-21
  • 1970-01-01
  • 2014-01-13
  • 2018-02-24
  • 2010-10-17
相关资源
最近更新 更多