2011-10-27 18 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

感謝を。それはクールだ。プロのヒント:すべてのフラグを次のようにまとめることができます: '-pie' – Chriszuma

+0

また、固体の最初の投稿の名誉です。問題は簡潔に説明され、解決策が試されました。よくやった。 – Chriszuma

+1

@Chriszuma実際の-pie組み合わせを試しましたか? – tadmc

答えて

8

Bashは、二重引用符で変数を置換するだけです。

これは動作するはずです:

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

EDIT実は、それはそこに\nで奇妙な行動かもしれません。別のアプローチは、Bashの文字列連結を利用することです。これは動作するはずです:

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

EDIT 2:を私はちょうどあなたが何をしようとしてよく見を取り、それは一種の危険です。 greedy形式の.*を使用しています。これは、必要以上に多くのテキストと一致する可能性があります。代わりに.*?を使用してください。私は上記の正規表現を更新しました。

1

「SOMEVARは」本当に外部変数である場合は、環境にエクスポートでき、したがって、それを参照:私は `-i`フラグが何を見上げる作るため

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