V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
dazkarieh
V2EX  ›  问与答

求正则批量替换写法

  •  1
     
  •   dazkarieh · Apr 6, 2019 · 2189 views
    This topic created in 2579 days ago, the information mentioned may be changed or developed.

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

    ![text](url)
    

    就替换为

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

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

    egrep -rn ' 正则' *.md
    
    sed -i "正则" '正则'
    
    7 replies    2019-04-08 10:38:33 +08:00
    yyai3
        1
    yyai3  
       Apr 6, 2019
    跑之前请备份

    sed -i -r 's/\!\[(.*)\]\((.*)\)/{{<img src="\1" alt="\2">}}/' *.md
    dazkarieh
        2
    dazkarieh  
    OP
       Apr 6, 2019
    @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  
       Apr 6, 2019
    `find hugo/post | grep '\.MD$'` | xargs sed -i 's/\!\[text\]\(url\)/\\{{< img src="url" alt="text">\}\}/g'

    没测试过,打包发给我我,我帮你替换哈哈哈
    dazkarieh
        4
    dazkarieh  
    OP
       Apr 6, 2019
    @sheep3 谢谢。哈哈,内容又黄又暴力,不想毒害祖国花朵。

    p.s 代码没效。我这里的 text 是指方括号里的任意文本,url 是指括弧里的任意一个链接地址,并非特指字符。
    skydiver
        5
    skydiver  
       Apr 6, 2019
    @dazkarieh Mac 里的 sed 不是 gsed
    yyai3
        6
    yyai3  
       Apr 8, 2019
    @dazkarieh gsed bsd-sed 区别 sed -E 's/\!\[(.*)\]\((.*)\)/{{<img src="\1" alt="\2">}}/'
    yyai3
        7
    yyai3  
       Apr 8, 2019
    @dazkarieh gsed bsd-sed 区别 sed -E 's/\!\[(.*)\]\((.*)\)/{{<img src="\1" alt="\2">}}/' 参数
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1442 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 16:55 · PVG 00:55 · LAX 09:55 · JFK 12:55
    ♥ Do have faith in what you're doing.