perl lazy用正则表达式匹配外部文件

时间:2019-03-03 17:43:04

标签: perl

我有一个index.html文件,其中包含类似以下的字符串:

vendor.adsf34.bundle.js blah blah inline.1r34afer.bundle.js

我已经构建了以下代码(mac,iterm2):

perl -i -pe 's/vendor\..+?\.js/vendor.js/g;' index.html
perl -i -pe 's/inline\..+?\.js/inline.js/g;' index.html

但是我最终得到了:

vendor.js

即,在需要懒惰的地方似乎是贪婪的匹配。

我想做的就是缩短js名称,例如:

vendor.js blah blah inline.js

非常高兴获得一些指导!

1 个答案:

答案 0 :(得分:2)

也许是这样?

  • 查找固定的起始字符串(vendor.inline. 1
  • 寻找一个或多个非空格字符
  • 寻找固定的结尾字符串(.js
  • 1 + .js
  • 替换
$ echo "vendor.adsf34.bundle.js blah blah  inline.1r34afer.bundle.js" | perl -pe 's/(vendor|inline)\.\S+\.js/\1.js/g'
vendor.js blah blah  inline.js