bash sed用正则表达式替换文本

时间:2016-11-03 06:53:46

标签: bash sed

我有一个名为package.json的文本文件,其中包含以下snippit:

  "single-instance":true,
  "user-agent": "somename",
  "PORT": 2000,

我需要更换某些名称'另一个值(在这种情况下是xxx)和' somename'不是固定的,它可以是任何东西。

所以我尝试使用以下正则表达式,但它没有更新文件。

我已经在regex101上测试了regex表达式并且它似乎是有效的,所以我想它必须与sed语法有关吗?

    sed -i 's/"user-agent": "(.*)"/xxx/' package.json

关于我哪里出错的任何建议?

2 个答案:

答案 0 :(得分:0)

您需要捕获匹配的密钥并使用替代参考:

sed -i.bak -E 's/("user-agent": )"[^"]*"/\1"xxx"/' file

cat file

"single-instance":true,
"user-agent": "xxx",
"PORT": 2000,

请注意(周围的)"user-agent":以获取第1组中的值并使用\1替换。

答案 1 :(得分:0)

你可以在备份package.json

之后试试这个
sed -i -re 's/("user-agent":).*$/\1 "xxx"/' package.json