【问题标题】:using sed in script to add html tag to text在脚本中使用 sed 将 html 标签添加到文本中
【发布时间】:2012-08-04 23:00:37
【问题描述】:

我正在尝试在 shell 脚本中使用 sed 将 html 超链接标签添加到纯文本文件中的 url。

这是我的newtext.txt的内容:

www.example.com

这是运行脚本后我想要的 newtext.txt 的所需内容:

<a href="http://www.example.com">www.example.com</a>

这是我当前脚本的内容,addhtml.sh:

#!/bin/bash
newtextv='cat newtext.txt'
sed -i.bak 's|\(www.*\)|<a href="$newtextv">\1</a>|' newtext.txt

但不幸的是,运行脚本后,newtext.txt的内容变成了:

<a href="$newtextv">www.example.com</a>

我相信我的错误在某种程度上与我的变量被引用的方式有关?

我最终希望这个脚本也能够转换完整的 url(包含 http:// )......我显然需要大量提高我的 sed 知识(我花了几天时间才做到这一点),但我无法理解这个。

谢谢!

【问题讨论】:

  • 感谢所有帮助!我保证在我有能力的时候回馈社区。谢谢!我希望我能够投票给你们所有人。

标签: html bash tags sed


【解决方案1】:

如果要将文件的内容放入变量中:

newtextv=$(cat newtext.txt)

但实际上,您可能想要这样的东西(但显然要使用更好的正则表达式):

sed 's|www\.[^ ]*|<a href="&">&</a>|g' <newtext.txt >newtext.html

Sed 用匹配的字符串替换每个&amp;

【讨论】:

  • 非常感谢。这对我的问题以及我目前正在尝试做的其他一些事情有很大帮助。我很感激!
【解决方案2】:

为什么要搞乱变量?

sed -i 's|\(www.*\)|<a href="\1">\1</a>|' newtext.txt

sed -i 's|www.*|<a href="&">&</a>|' newtext.txt

【讨论】:

    【解决方案3】:

    如果您碰巧在变量中有 URL,您也可以不使用 sed:

    newtextv=www.example.com
    echo "<a href=\"http://${newtextv#www.}\">$newtextv</a>"
    

    返回

    <a href="http://example.com">www.example.com</a>
    

    在 Bash 中,您可以将 manipulate variables 作为变量替换的子集。
    这里${newtextv#www.} 基本上意味着取$newtextv 并剪掉“www”。从一开始就

    【讨论】:

    • 非常感谢。感谢您的帮助和额外的信息。我认为这可能是我想要完成的更好的途径,因为它也适用于完整的 url。谢谢!
    【解决方案4】:

    你的麻烦是两个小语法错误:

    1. cat newtext.txt 永远不会执行,您需要使用反引号 `$()
    2. 使用单引号' 可防止变量扩展。要允许变量扩展,请使用双引号 "

    这是你想要做的:

    #!/bin/bash
    newtextv=$(cat newtext.txt)
    sed -i.bak "s|\(www.*\)|<a href=\"$newtextv\">\1</a>|" newtext.txt
    

    【讨论】:

      猜你喜欢
      • 2012-12-08
      • 2020-12-21
      • 2014-02-17
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      • 2020-06-19
      相关资源
      最近更新 更多