V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
css3
V2EX  ›  程序员

替换文本,遇到相同的,该怎么处理

  •  
  •   css3 · 2019-04-18 09:40:52 +08:00 · 1617 次点击
    这是一个创建于 2072 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如下有个 json 文件,想把其中 abc 节点中的 IP 给替换成 192.168.1.2, 如何替换?

    • 只想替换 abc 节点的 IP,不能把 def 节点的也替换了
    • 用 a nsible 怎么替换?
    • 如果用不了 an sible,用 sed 如何替换?
    abc":{
      "a":true,
      "IP":"192.168.1.1",
      "c":10011,
      "d":5,
      "e":5
           },
    
    "def": {
    	"a": true,
    	"Server": [{
    		"Is": false,
    		"IP": "192.168.1.1",
    		"Port": 5577
    	}]
    },
    
    "ghi": {
    	"a": true,
    	"ka": {
    		"ServerIP": "192.168.11.236",
    		"SPort": 9092,
    		"Top": "ifaas-secondStructure",
    		"Gr": "ifaas-engine",
    		"Us": "",
    		"Pa": "",
    		"Sa": false
    	},
    
    
    7 条回复    2019-04-19 13:06:05 +08:00
    ly4572615
        1
    ly4572615  
       2019-04-18 10:10:07 +08:00
    sed -n '/^ "IP"/p' test
    css3
        2
    css3  
    OP
       2019-04-18 10:30:07 +08:00
    @ly4572615 假如文件名是 test

    sed -n '/^ "192.168.1.1"/192.168.1.2' test ?????这个意思吗
    ly4572615
        3
    ly4572615  
       2019-04-18 10:31:10 +08:00
    test 没错,可是你关键字没理解
    truehyp
        4
    truehyp  
       2019-04-18 10:34:04 +08:00
    sed -n ":a;p;/\"abc\":{/{:c;n;/\"IP\":/{s/192.168.1.1/192.168.1.2/;ba};p;bc}" txt
    geelaw
        5
    geelaw  
       2019-04-18 10:38:40 +08:00 via iPhone   ❤️ 1
    为什么不能用自然的方法解决呢?自然的方法是把文件解析好之后做结构化的操作,再序列化成文本。

    不要指望不能处理 CF 语言的程序处理 CF 语言。用一大堆 adhoc 的性质去操作,虽然可以对目前手上的文件有效,但并不是长远的策略,每次先观察文件的特殊结构再写一段新的代码去处理,和手工处理只不过是五十步和百步的区别。
    css3
        7
    css3  
    OP
       2019-04-19 13:06:05 +08:00 via iPhone
    @onetown 官方文档没有找到我先要的解决办法呀😭
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5410 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 08:58 · PVG 16:58 · LAX 00:58 · JFK 03:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.