如何提取文件中的字符串并替换特定的模式文本

时间:2018-07-18 15:54:36

标签: regex linux sed

我编辑markdown文件并插入图像。内容就像

1. This is some content
![](directory/regist.png)
2. This is some other content ![](directory/user_registered.png)

我想将内容解析为Hexo资产图片格式。想要的内容就像

1. This is some content
{% asset_img regist.png %}
2. This is some other content {% asset_img user_registered.png %}

我可以使用一些编程代码(例如java或python)逐行读取文件并找到![](模式,然后提取文件名并合并为新字符串,例如{% asset_img regist.png %}。但这似乎并不明智。

我还搜索sed并表达速成。我现在正在研究sed -i -E 's/!\[(.*?)\]((.*?)\/?(.*?))/\{% asset_img $3 %\}/g' test.md。但是它不起作用,它会生成新文件test.md-E,但没有任何更改。我如何实现我的目标?

1 个答案:

答案 0 :(得分:4)

您可以尝试:

sed -i.bak 's/!\[]([^()]*\/\([^)]*\))/{% asset_img \1 %}/g' file

请参见live demo here

正则表达式细目:

  • !\[]从字面上匹配![]
  • (匹配左括号
    • [^()]*\/匹配并包括最后一个斜杠
    • \(开始捕获第1组
      • [^)]*匹配下一个右括号
    • \)捕获第1组结束
  • )匹配右括号