Perlのワンライナー(XMLの特定の要素を抽出、加工する。)

こんなXMLの内容の、「カテゴリ」の要素を引っこ抜きたい場合。

 <lst name="facet_fields">
  <lst name="カテゴリ">
        <int name="カテゴリ1">70794</int>
        <int name="カテゴリ2">61133</int>
        <int name="カテゴリ3">51198</int>
        <int name="カテゴリ4">30447</int>
        <int name="カテゴリ5">26365</int>
        <int name="カテゴリ6">24425</int>
        <int name="カテゴリ7">16539</int>
        <int name="カテゴリ8">12921</int>
        <int name="カテゴリ9">7802</int>
        <int name="カテゴリ10">4534</int>
        <int name="カテゴリ11">3539</int>
        <int name="カテゴリ12">3432</int>
        <int name="カテゴリ13">2045</int>
        <int name="カテゴリ14">918</int>
        <int name="カテゴリ15">410</int>
  </lst>
 </lst>

こう書くといける。

perl -0777 -pe "s|^.*<lst name=\"facet_fields\">.*<lst name=\"カテゴリ\">(.*?)</lst>.*|\$1|sg" カテゴリ.xml

$1の前の\を書き忘れて1時間くらいハマった。「カテゴリ」の部分を変数にしたい場合、
置換の指示をダブルクォートで囲まないといけないので、ダブルクォートをエスケープする他に
$もエスケープしないといけないことに注意。

追記
ってーかコレ「Perlの文字列内に$があるときはエスケープしないとエラーになる。」でハマってたやん・・・orz