0

我正在尝试在 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 知识(我花了几天时间才做到这一点),但我可以不要把我的头绕在这个上面。

谢谢!

4

4 回答 4

2

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

newtextv=$(cat newtext.txt)

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

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

Sed 用&匹配的字符串替换 every。

于 2012-08-03T20:38:56.950 回答
0

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

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

这是你想要做的:

#!/bin/bash
newtextv=$(cat newtext.txt)
sed -i.bak "s|\(www.*\)|<a href=\"$newtextv\">\1</a>|" newtext.txt
于 2012-08-04T15:00:37.450 回答
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 中,您可以将变量作为变量替换的子集进行操作。
这里${newtextv#www.}基本上意味着采取$newtextv和削减“www”。从一开始

于 2012-08-03T20:50:29.110 回答
0

为什么要搞乱一个变量?

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

或者

sed -i 's|www.*|<a href="&">&</a>|' newtext.txt
于 2012-08-03T20:39:36.987 回答