在脚本中使用sed将html标记添加到文本中

时间:2012-08-03 20:29:26

标签: html bash tags sed

我正在尝试在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>

我认为我的错误在某种程度上与我的变量的引用有关?

我最终希望这个脚本也能够转换完整的网址(包含http://)......我显然需要提高我的sed知识(这需要几天时间才能实现这一目标),但我无法绕过这一个。

谢谢!

4 个答案:

答案 0 :(得分:2)

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

newtextv=$(cat newtext.txt)

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

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

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

答案 1 :(得分:0)

为什么乱用变量?

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

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

答案 2 :(得分:0)

如果你碰巧在变量中有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。”从一开始

答案 3 :(得分:0)

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

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

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