我想读取从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>
答案 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-打印新行