sed命令从html中的脚本调用读取.js文件的名称

时间:2018-08-12 15:03:35

标签: html sed

我想读取从HTML文件调用的所有.js文件。读取以下命令,但如果呼叫中还有其他功能,则不会读取。

jsFiles=$(echo "$BODY" | sed -rn 's/<script\ssrc=\W(.*.js).*/\1/p')

对于上述命令,脚本文件调用应如下所示:

<script src='js/default.js'></script>

输出:

js/default.js

如何修改它适用于脚本调用可能包含的其他选项?

例如;

<script  type="text/javascript" src="'$lastJsLocation'" language="javascript"> </script>

2 个答案:

答案 0 :(得分:1)

如果您的HTML确实是那么普通,并且目标部分一次只位于一行上:

$ sed -n 's/.*<script.*src=["'\'']*\([^"'\'']*\).*/\1/p' file
js/default.js
$lastJsLocation

答案 1 :(得分:1)

我建议使用XML解析器提取所需的值。

鉴于您要解析的HTML位于文件中

 $ cat file1
 <script src='js/default.js'></script>
 $ cat file2
 <script  type="text/javascript" src="'$lastJsLocation'" language="javascript"></script>

如果有xmllint可用,则可以使用以下命令:

 $ xmllint --xpath 'string(//script/@src)' file1
 js/default.js
 $ xmllint --xpath 'string(//script/@src)' file2
 '$lastJsLocation'

如果您有xmlstarlet,则可以使用以下命令:

$ xmlstarlet sel -T -t -m /script/@src -v . -n file1
js/default.js
$ xmlstarlet sel -T -t -m /script/@src -v . -n file2
'$lastJsLocation'

xmlstarlet选项似乎很复杂,但是如果您查看xmlstartlet sel --help则没有。部分输出如下:

  

-T-输出为文本(默认为XML)
  -t-模板
  -m-匹配XPATH表达式
  -v-XPATH表达式的打印值
  -n-打印新行