2012-08-03 117 views
0

我試圖在shell腳本中使用sed將html超鏈接標記添加到純文本文件中的url。在腳本中使用sed將html標記添加到文本

這是我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 

但不幸的是,在運行腳本之後,c newtext.txt中的ontent變爲:

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

我相信我的錯誤在某種程度上涉及到我的變量是如何被引用?

我最終希望這個腳本也能夠轉換完整的URL(包含http://)......我顯然需要提高我的sed知識,這很好(我花了幾天的時間才弄到這麼遠) ,但是我無法把頭圍繞在這個上面。

謝謝!

+0

我感謝所有幫助!我承諾在我有技能時回饋社區。謝謝!我希望我能夠投票支持你們所有人。 – user1574991 2012-08-03 21:36:15

回答

2

如果你想要把該文件的內容到一個變量:

newtextv=$(cat newtext.txt) 

不過說真的,你可能想是這樣的(不過有更好的正則表達式,很明顯):

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

桑達用匹配的字符串替換每個&

+0

非常感謝。這幫助我解決了我的問題,以及我目前正在嘗試做的其他一些事情。我很感激! – user1574991 2012-08-03 21:33:35

0

爲什麼要亂用變量?

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

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

非常感謝!這兩個工作都很完美。 – user1574991 2012-08-03 21:08:07

0

如果你碰巧有一個變量的網址,您也可以不用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」。從它開始

+0

非常感謝。感謝您的幫助和額外的信息。我想也許這可能是我嘗試完成的更好的路線,因爲它也可以使用完整的網址。謝謝! – user1574991 2012-08-03 21:31:28

0

你麻煩的是兩個小的語法錯誤:

  1. cat newtext.txt永遠不會執行,你需要使用用單引號'防止變量在擴大後引號`$()
  2. 。要允許變量擴展使用雙引號"

這裏是你想做的事:

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