我正在尝试在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知识(这需要几天时间才能实现这一目标),但我无法绕过这一个。
谢谢!
答案 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)
你的麻烦是两个小的语法错误:
cat newtext.txt
永远不会执行,您需要使用反引号`
或$()
'
可防止变量扩展。要允许变量扩展,请使用双引号"
这是你想要做的:
#!/bin/bash
newtextv=$(cat newtext.txt)
sed -i.bak "s|\(www.*\)|<a href=\"$newtextv\">\1</a>|" newtext.txt