我可以使用这种类型的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.js
或X.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机器上使用。
答案 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通常被认为是不好的做法,因为该语言可能太复杂了