ファイルの最後の行から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