ファイルの3行目から最後の行までの最後のパターンを置き換える方法

ファイルの3行目から最後の行までの最後のパターンを置き換える方法

ファイルの最後の行から3行目の文字列の最後の項目を置き換えたいファイルがあります。次のファイルがあります。

  analyze_compression_testpoints -log no -TESTMODE FULLSCAN
  -EXPERIMENT <br /> azul_rrfa -outputfile
  ./testresults/testinsertion.file<br />
</body>
</html>

最後の行から3行目だけを変更したいと思います<br /></font>私は以下を使用しています:

sed -i "s|\(.*\)<br />\$|\1</font>|g"

ただし、各行の最後の項目をすべて置き換えることですが、すべての行ではなくファイルの最後の項目だけが必要です。

答え1

そしてsed

tac file | sed '3 s|<br />$|</font>|' | tac

そしてed

echo -e '$-2s/<br \/>$/<\/font>/\nw' | ed -s file

そしてvim

:$-2 s!<br />$!</font>!

答え2

これはファイルの最後のエントリなので、次のsedスクリプトを使用できます。

sed -i 'H;1h;$!d;g;s_\(.*\)<br />_\1</font>_' yourfile.html

あるいは、GNUと拡張sed正規表現を使用して単純化します。

sed -izE 's_(.*)<br />_\1</font>_' yourfile.html

秘密は、1つのバッファでファイル全体を処理することです。 POSIXバージョンは保持バッファに収集してこれを行い、GNUバージョンは-zこのオプションを使用します。次に、パターンの最後の発生を含むsすべての項目の交換()コマンドを使用し、パターンの前のすべての項目(の部品を参照)を交換して置き換えます。.*\1()

最後の行から3番目の行だけを変更する必要がある場合は、別の試み(一致するものがない場合は変更せず、最後の行または最後の行から2番目の行を置き換えないでください):

sed '1N;N;$!{P;D];s_<br />_</font>_' yourfile.html

関連情報