Perl one liner用于在变量文件中查找和替换

时间:2011-10-27 21:17:22

标签: perl command-line

我正在尝试查找<li ><a href='xxxxxxxx'>some_link</a></li>并将其替换为空。要做到这一点,我正在运行下面的命令,但它正在识别$作为正则表达式的一部分。

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

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:11)

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:我只是仔细看看你想要做什么,这有点危险。您使用.*形式的.*?,可能会比您想要的文本多得多。请改用{{1}}。我更新了上面的正则表达式。

答案 1 :(得分:1)

如果“SOMEVAR”确实是一个外部变量,您可以将其导出到环境并引用它:

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