我想使用Linux命令(</script>
,sed
...)在HTML文件中的awk
之前删除换行符。
样本输入:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JavaScript Ders 2</title>
<script type="text/javascript" src="script1.js" language="javascript">
</script>
<script type="text/javascript" src="script2.js" language="javascript">
</script>
<script>
// script kodumuz buraya yazılacak
</script>
</head>
<body>
<script type="text/javascript" src="script3.js" language="javascript">
</script>
</body>
</html>
示例输出:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JavaScript Ders 2</title>
<script type="text/javascript" src="script1.js" language="javascript"> </script>
<script type="text/javascript" src="script2.js" language="javascript"> </script>
<script>
// script kodumuz buraya yazılacak</script>
</head>
<body>
<script type="text/javascript" src="script3.js" language="javascript"> </script>
</body>
</html>
我尝试了不同的语法,但是没有一个可以做。
答案 0 :(得分:1)
首先,如评论Don't parse XML with Regex中所述!永远不要去做,不要去想它。养成不去想的习惯!有时,它看起来像是可以使用sed或awk或任何其他正则表达式解析器执行的简单任务,但没有...
另一方面,如果您确实想使用sed或awk,则可以执行的操作–首先使用xmlstarlet处理文件并将其转换为PYX格式。 / p>
PYX格式是以下内容的面向行的表示形式: 从SGML ESIS格式派生的XML文档。 (请参阅ESIS-ISO 8879元素结构信息集规范, ISO / IEC JTC1 / SC18 / WG8 N931(ESIS))
所以您真正想做的是:
$ xmlstarlet pyx <file.html> | do_your_magic_here | xmlstarlet depyx > file.new.html
在您的情况下,这类似于:
$ xmlstarlet pyx file.html \
| awk 'c~/^- *\\n *$/&&/^)script$/{c=$0;next}{print c; c=$0}END{print c}' \
| xmlstarlet depyx
这将输出
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta>
<title>JavaScript Ders 2</title>
<script language="javascript" src="script1.js" type="text/javascript"></script>
<script language="javascript" src="script2.js" type="text/javascript"></script>
<script>
// script kodumuz buraya yazılacak
</script>
</head>
<body>
<script language="javascript" src="script3.js" type="text/javascript"></script>
</body>
</html>
答案 1 :(得分:-2)
这可能对您有用(GNU sed):
sed 'N;s/\n\(<\/script>\)/\1/;P;D' file
在整个文件中保留两行窗口,如果第二行以</script>
开头,则删除前面的换行符。