使用sed格式化xml

时间:2017-09-29 00:09:47

标签: regex unix sed

嘿伙计们很喜欢这个,我应该用sed格式化一个xml片段。

这是原始代码段:

<input>
    <program_name>
            CS
    </program_name>
    <course_name>
                            ART CLASS
    </course_name>
    <instructor>
                John Smith
    </instructor>
</input>

我的sed命令应将其格式化为以下内容:

    <input>
        <program_name>CS</program_name>
        <course_name>ART CLASS</course_name>
        <instructor>John Smith</instructor>
  </input>

到目前为止,我有以下内容:

sed -r 'N;N;s/<([a-z_]+)>( *\n* *)([[a-z]+ ?[a-z]+]+)( *\n* *)(<\1>)/<\1>\3\5/g' question.txt

不幸的是,似乎没有任何改变,任何提示/帮助都非常感激。

1 个答案:

答案 0 :(得分:2)

免责声明:流编辑器和正则表达式不是解析XML或HTML等标记语言的好工具,在这种情况下,我们不必依赖标记匹配,但如果您确实需要解析或者在bash中使用xml做任何事情,请到这里How to parse XML in Bash?

我发现原始正则表达式中存在足够的错误,我选择切换到自己的错误来执行您想要的操作:

import kafka.utils.{TestUtils, ZKStringSerializer, ZkUtils}
import org.I0Itec.zkclient.{ZkClient, ZkConnection}
import kafka.utils.ZkUtils._

var zkUtils: ZkUtils = _   
//val zkConnection= new ZkConnection(zkConn)
//zkClient = new ZkClient(zkConn,5000,5000,ZKStringSerializer)
//val zkUtils = new ZkUtils(zkClient, zkConnection, false)
val (zkClient, zkConnection) = ZkUtils.createZkClientAndConnection(
  zkConn, sessionTimeoutMs, connectionTimeoutMs)
zkUtils = new ZkUtils(zkClient, zkConnection, false)

and here's a demo

除了正则表达式错误之外,你可能会遇到其他问题,将多行缓冲到sed或重叠匹配,你可能想看一下这个问题来编写一个好的多行bash脚本:How can I replace a newline (\n) using sed?