我想删除 </script>
之前的换行符使用 Linux 命令( sed
、 awk
...)在我的 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>
示例输出:
<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>
我尝试了不同的语法,但没有一个能做到。
最佳答案
首先,正如评论中提到的Don't parse XML with Regex !永远不要这样做,永远不要想它。养成不去想的习惯!有时,它可能看起来是一个简单的任务,可以使用 sed 来执行。或awk或任何其他正则表达式解析器,但没有...
另一方面,如果您确实想使用sed,您可以做什么或awk — 首先使用 xmlstarlet 处理文件并将其转换为 PYX 格式。
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>
关于linux - 在匹配前删除换行符 - Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51407425/