2011-10-27 33 views
7

我試圖找到<li ><a href='xxxxxxxx'>some_link</a></li>並將其替換爲空。爲此,我正在運行下面的命令,但它將$識別爲正則表達式的一部分。Perl一行代碼找到並替換一個變量文件

perl -p -i -e 's/<li ><a href=.*$SOMEVAR.*li>\n//g' file.html

我試過下面的東西,
${SOMEVAR}
\$SOMEVAR
FIND="<li ><a href=.*$SOMEVAR.*li>"; perl -p -i -e 's/$FIND//g' file.html

任何想法?謝謝。

+0

謝謝你讓我查的'-i'標誌做什麼。太棒了。專業提示:你可以把所有的標誌放在一起,像這樣:'-pie' – Chriszuma

+0

此外,堅實的第一篇文章上的榮譽。簡要描述問題以及嘗試解決方案。做得好。 – Chriszuma

+1

@Chriszuma你試過實際的-pie組合嗎? – tadmc

回答

8

Bash只用雙引號進行變量替換。

這應該工作:

perl -p -i -e "s/<li ><a href=.*?$SOMEVAR.*?li>\n//g" file.html 

編輯其實,這可能會在那裏行事怪異與\n。另一種方法是利用Bash的字符串連接。這應該工作:

perl -p -i -e 's/<li ><a href=.*?'$SOMEVAR'.*?li>\n//g' file.html 

編輯2:我只是把你正在試圖做什麼定睛一看,這是一種危險的。您正在使用的greedy表單,這可能會比您想要的文字更多。改爲使用.*?。我更新了上述正則表達式。

1

如果「SOMEVAR」確實是一個外部變量,你可以將它導出到環境中,因此引用它:

SOMEVAR=whatever perl -p -i -e 's/<li ><a href=.*$ENV{SOMEVAR}.*li>\n//g' file.html 
相關問題