比赛前删除换行符-Linux

时间:2018-07-18 17:02:19

标签: linux bash awk sed

我想使用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>

我尝试了不同的语法,但是没有一个可以做。

2 个答案:

答案 0 :(得分:1)

首先,如评论Don't parse XML with Regex中所述!永远不要去做,不要去想它。养成不去想的习惯!有时,它看起来像是可以使用或任何其他正则表达式解析器执行的简单任务,但没有...

另一方面,如果您确实想使用,则可以执行的操作–首先使用处理文件并将其转换为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>开头,则删除前面的换行符。