V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
dazkarieh
V2EX  ›  问与答

求正则批量替换写法

  •  1
     
  •   dazkarieh · 2019-04-06 17:33:16 +08:00 · 1647 次点击
    这是一个创建于 2059 天前的主题,其中的信息可能已经有所发展或是发生改变。

    各位大佬: 我想检索hugo/post/目录下所有*.MD 文件的内容(几百篇,手动替换会死人),如果遇到

    ![text](url)
    

    就替换为

    {{< img src="url" alt="text">}}
    

    我能想到类似下面的 egrep、sed 用法,但是文科生不会写正则……

    egrep -rn ' 正则' *.md
    
    sed -i "正则" '正则'
    
    7 条回复    2019-04-08 10:38:33 +08:00
    yyai3
        1
    yyai3  
       2019-04-06 17:51:19 +08:00
    跑之前请备份

    sed -i -r 's/\!\[(.*)\]\((.*)\)/{{<img src="\1" alt="\2">}}/' *.md
    dazkarieh
        2
    dazkarieh  
    OP
       2019-04-06 18:27:03 +08:00
    @yyai3 谢谢这位兄弟!不过貌似有点小问题

    ```bash
    iMac:hugo root# cd post
    iMac:post root# sed -i -r 's/\!\[(.*)\]\((.*)\)/{{<img src="\1" alt="\2">}}/' *.md
    sed: 1: "s/\!\[(.*)\]\((.*)\)/{{ ...": \2 not defined in the RE
    ```
    sheep3
        3
    sheep3  
       2019-04-06 18:40:23 +08:00
    `find hugo/post | grep '\.MD$'` | xargs sed -i 's/\!\[text\]\(url\)/\\{{< img src="url" alt="text">\}\}/g'

    没测试过,打包发给我我,我帮你替换哈哈哈
    dazkarieh
        4
    dazkarieh  
    OP
       2019-04-06 19:05:39 +08:00
    @sheep3 谢谢。哈哈,内容又黄又暴力,不想毒害祖国花朵。

    p.s 代码没效。我这里的 text 是指方括号里的任意文本,url 是指括弧里的任意一个链接地址,并非特指字符。
    skydiver
        5
    skydiver  
       2019-04-06 19:12:36 +08:00
    @dazkarieh Mac 里的 sed 不是 gsed
    yyai3
        6
    yyai3  
       2019-04-08 10:34:39 +08:00
    @dazkarieh gsed bsd-sed 区别 sed -E 's/\!\[(.*)\]\((.*)\)/{{<img src="\1" alt="\2">}}/'
    yyai3
        7
    yyai3  
       2019-04-08 10:38:33 +08:00
    @dazkarieh gsed bsd-sed 区别 sed -E 's/\!\[(.*)\]\((.*)\)/{{<img src="\1" alt="\2">}}/' 参数
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5654 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 08:10 · PVG 16:10 · LAX 00:10 · JFK 03:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.