linux - 在匹配前删除换行符 - Linux

标签 linux bash awk sed

我想删除 </script> 之前的换行符使用 Linux 命令( sedawk ...)在我的 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 !永远不要这样做,永远不要想它。养成不去想的习惯!有时,它可能看起来是一个简单的任务,可以使用 来执行。或或任何其他正则表达式解析器,但没有...

另一方面,如果您确实想使用,您可以做什么或 — 首先使用 处理文件并将其转换为 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/

相关文章:

linux - 如何做一个选项取决于buildroot中的库版本

linux - Linux 中匹配数据然后打印某些数据的最佳命令

linux - .bashrc 文件显示错误

bash - 如何在 bash 脚本中从 matlab 获取返回值?

bash - 使用 awk 排除定义模式

awk - Awk:如何每四行替换一个字符串?

linux - 查找名称包含 "AC"的文件和名称以 "RES"开头的文件列表

Linux根据输入日期复制文件

linux - 如何在linux中检查 'if-then-else-fi'中的多个字符串?

awk - 有没有办法用 sed 替换所有逗号,除了引号中的逗号