2012-03-05 3 views
0

私はXMLファイルでテキストを見つけようとしていて、それを持っている行の一部だけを削除しようとしています。
いくつかのコードを検索した後で、このフォーマットを試してみました:perl -p -i -e "s/$1/$2/g" $3perl one linerを使ってファイル内の特定のテキストを削除するには?

だから私はこのコードを使用しています:

perl -p -i.bak -e "s/\'../../../specialText/\'//g" "C:/box/fileName.XML"; 

私は何をしたいことのように内側の単一引用符からすべて削除します: 「を../../../specialText/」しかし、q()や\ 'を使って引用符をエスケープするとうまくいきません。私は、テキスト置換として何も入れないのは、それを正しく削除するだろうと推測していますが、わかりません。

エラーは以下のとおりです(?の前に演算子がありません\)ここで、-eライン1で予想オペレータ、近くに "/ specialText/\"

  • を見つけ

    1. バックスラッシュ 構文エラーがで - e線1、近くに "/ specialText/\"

    2. 文字列の終端を見つけることができません """ どこでも-e行で、EOFの前に1

    これを達成するためにこの1つのライナーをどのように書き直すのですか?

    これは機能します。

    C:\box>perl -p -i.bak -e s/Copyright/bar/g Test.txt 
    

    私は今、私はちょうど私の元を変更することでプレイしている、別のファイルでそれを試してみました。

  • 答えて

    1

    別の区切り文字を使用すると何が問題になりますか?

    perl -p -i.bak -e "s{'../../../specialText/'}{}g" "C:/box/fileName.XML" 
    
    +0

    私はそのようなファイルやディレクトリを取得していないよ:

    しかし、急性leaning toothpick syndromeを避けるために、私はこのように、代替正規表現の区切り文字と\Q\Eescape sequencesを使用して代わりにお勧めします。私はWindows 7のボックスでActivePerlを使用しています。これはセットアップの問題ですか? –

    +0

    コードが機能するため、ファイル名を確認してください。 )この1本のライナーをテストすると、私に起こった、btw;私は.plファイルと.pdfファイルを混同しました。 ) – raina77ow

    +0

    私はセミコロン ';'コマンドラインを終了したときには必要ではないステートメントを最後に入力します。 –

    3

    あなたはそれらのそれぞれの前にバックスラッシュ(\)を置くことによって、検索文字列に./文字をエスケープすることができます。

    perl -p -i.bak -e "s(\Q'../../../specialText/'\E)()g" "C:/box/fileName.XML" 
    
    関連する問題