【问题标题】:Make shell output HTML ready准备好 shell 输出 HTML
【发布时间】:2012-11-14 20:11:28
【问题描述】:

我使用的系统可以使用 shell 脚本为 Web 界面生成输出。它工作得很好,但是在今天出现问题的情况下,我需要能够在换行符通常会出现的位置插入一个中断标记。我的脚本如下所示:

#!/bin/bash
users=`decl . -read /Groups/admin | grep GroupMembers | tr ' ' '\n'`
echo "<result>"$users"</result>"

我正在寻找一种将\n 变为&lt;br /&gt; 的方法,仅在命令中替换它是行不通的。该脚本有效,这意味着它可以有效地抓取数据并将其显示在我们的 Web 界面中,但用户都在一条线上,这不是预期的结果。

【问题讨论】:

    标签: html bash shell tr


    【解决方案1】:

    tr 仅将单个字符替换为单个字符(如果使用 -d,则不替换)。要将单个字符替换为多个字符,您需要使用其他内容。

    与您当前代码最相似的选项是使用sed 而不是tr

    #!/bin/bash
    users=`decl . -read /Groups/admin | grep GroupMembers | sed 's# #<br />#g'`
    echo "<result>"$users"</result>"
    

    【讨论】:

    • 也非常感谢。我还没有尝试过,但如果它有效,它似乎是一种“更正确”的方式。
    • 从描述上看,sed 's#$#&lt;br /&gt;#' 比较合适。
    • 善用#,避免转义/
    • @glennjackman:你可能是对的。对我来说,除了产生\n 而不是&lt;br /&gt; 之外,OP 听起来确信他当前的脚本是正确的,所以我给出了一个只进行了一次更改的脚本;但从他对sampson-chen的回答来看,这似乎并不是他真正需要的改变。
    【解决方案2】:

    $users 包含在echo 命令的引号中。即将您的脚本更新为:

    #!/bin/bash
    users=`decl . -read /Groups/admin | grep GroupMembers | tr ' ' '\n'`
    echo "<result>$users</result>"
    

    这应该可以解决“用户都在一条线上”的问题

    【讨论】:

    • 但它不会将换行符转换为 HTML &lt;br&gt;
    • 不,但它会产生所需的结果。
    • @CarltonBrumbelow 很高兴你得到了你想要的东西 =)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多