【linux】用sed 命令修改json文件,正则表达式的复杂用法,全部替换或只替换第一次

全部替换比较容易,只替换一次比较难,没有例子可能搞半天都搞不出来,tips: 如果匹配表达式有问题可以使用p这个选项调试。

一、使用正则表达式搜索文件的内容,把所有的匹配项全部替成的新的字符串

有一个文件名叫file.json, 把里面的"digest": "10002000" 或者"digest": "30004000" 之类的值全部替换成"digest": "ffffffff"

sed -i -E 's/\"digest\"\:[[:space:]]+.*/"digest": "ffffffff"/' file.json

这句命令使用了 sed 工具,目的是在文件 file.json 中进行文本替换。解释一下每个部分的含义:

    sed: 是一个流编辑器,用于对文本进行处理,通常用于文本替换、删除、过滤等操作。

    -i: 是 sed 命令的选项之一,表示直接修改文件而不是在标准输出中显示结果。当使用 -i 选项时,sed 将会直接修改指定的文件,而不是将结果输出到屏幕。

    -E: 是 sed 命令的另一个选项,用于启用扩展正则表达式的支持。使用了 -E 选项后,可以在 sed 命令中使用更加灵活的正则表达式语法。

    's/\"digest\"\:[[:space:]]+.*/"digest": "ffffffff"/': 这是 sed 命令中的具体操作部分,它包含了多个部分:

        s: 这是一个替换命令,用于指定要进行的操作类型,这里 s 表示替换。

        \"digest\"\:[[:space:]]+.*/: 这是一个正则表达式模式,用于匹配要被替换的内容。具体来说:

            \"digest\": 匹配字符串 "digest"。

            \:: 匹配冒号 :。在正则表达式中,冒号是特殊字符,需要使用反斜杠进行转义。

            [[:space:]]+: 匹配一个或多个空白字符。[[:space:]] 是一个 POSIX 字符类,表示空白字符,包括空格、制表符等。

            .*: 匹配零个或多个任意字符。

        `"digest": "

"digest": "ffffffff" 是替换模式的一部分,表示要将匹配到的内容替换为 "digest": "ffffffff"。所以这个命令的作用是在文件中查找包含 "digest": 的行,将其中的内容替换为 "digest": "ffffffff"。

二、使用正则表达式搜索文件的内容,只把第一个匹配项替成的新的字符串,比如搜索到文件中有10个"digest":"xxxxxxxx"的行,只修改替换第一个,其他9个不变。

sed -i -E '1,/\"digest\"\:[[:space:]]+.*/s/\"digest\"\:[[:space:]]+.*/"digest": "ffffffff"/g' file.json

现在来解释具体操作部分:

    '1,/\"digest\"\:[[:space:]]+.*/s/\"digest\"\:[[:space:]]+.*/"digest": "ffffffff"/g': 这部分较为复杂,但我们一步一步解释它。

        1,/\"digest\"\:[[:space:]]+.*/: 这是一个地址范围,它指定了替换操作的范围。具体解释如下:

            1: 表示从第一行开始。

            ,: 是地址范围中两个地址的分隔符。

            /\"digest\"\:[[:space:]]+.*/: 这是第二个地址,它是一个正则表达式模式,用于匹配要替换的行。具体来说:

                \"digest\": 匹配字符串 "digest"。

                \:: 匹配冒号 :。

                [[:space:]]+: 匹配一个或多个空白字符。

                .*: 匹配零个或多个任意字符。这里的意思是匹配包含 "digest": 的行。

        s/\"digest\"\:[[:space:]]+.*/"digest": "ffffffff"/g: 这是一个替换命令,它用于在指定范围内进行替换。具体解释如下:

            s: 这是替换命令的开始。

            \"digest\"\:[[:space:]]+.*/: 这是替换命令的匹配模式,与前面的地址范围中的模式相同,用于匹配要被替换的内容。

            "digest": "ffffffff": 这是替换命令的替换内容,表示要将匹配到的内容替换为 "digest": "ffffffff"。

            g: 这是替换命令的标志,表示进行全局替换,即替换所有匹配到的内容。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值