用单词前面的单词和最后一个单词之间的sed内容替换

时间:2020-04-06 15:47:33

标签: regex sed

我可以使用这种类型的html

<script type="text/javascript" charset="utf-8" src="/javascripts/docs/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
<link rel="stylesheet" href="css/style.css" type="text/css" />
<link rel="stylesheet" href="../common.css" type="text/css" />

我想替换src="href="X.jsX.css之间的路径。我在https://regex101.com/r/45ekfL/3上有一个可用的版本,但是为什么它不能与sed一起使用?

我想要的结果:

<script type="text/javascript" charset="utf-8" src="../doc/new/test/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="../doc/new/test/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="../doc/new/test/jquery.js"></script>
<link rel="stylesheet" href="../doc/new/test/style.css" type="text/css" />
<link rel="stylesheet" href="../doc/new/test/common.css" type="text/css" />

我与javascript链接最接近的是:

echo '<script type="text/javascript" charset="utf-8" src="js/app.js"></script>' | \
    sed -E 's#(src=").*(\w*.js)#\1/new/path/\2#'

带有#标志,因为我为新路径注入了斜线。

它给了我

<script type="text/javascript" charset="utf-8" src="/new/path/.js"></script>

如果我在最后一个捕获组(src=").*\/(\w*.js)之前添加了丢失的斜杠,我的s不再起作用。

为什么? 我可以使用命名捕获组吗?是个好主意吗?

我在osx上,但是该命令也将在ubuntu机器上使用。

1 个答案:

答案 0 :(得分:0)

如评论中所述

我不了解osx,但由于\ w是非标准

这是两个建议

sed -E 's#(src=")[^"]*(/[^"]*\.js")#\1/new/path\2#'

sed -E 's#(src=").*\/([a-z]*.js)#\1/new/path/\2#'

但是不建议您继续处理html:

使用正则表达式解析html通常被认为是不好的做法,因为该语言可能太复杂了

相关问题