シェルスクリプトを使用して、大きなファイルの最後の行の後に '' を追加する

シェルスクリプトを使用して、大きなファイルの最後の行の後に '' を追加する

ファイルの最後の行を見つけて追加するには、SED または AWK コマンドが必要です</pre>

のような:

LINELINELINE

変更点:

LINELINELINE</pre>

答え1

また、いわゆる複合コマンド。これはコマンドのリストであり、シェルは複合コマンドの外部の目的でこれを単一のコマンドとして扱います。

はい、それはいくぶん再帰的な定義ですが、例を挙げると理解しやすくなります。

たとえば、ファイルを と で囲むには<pre></pre>次のようなコマンドを使用します。

( printf '<pre>' ; cat originalfile ; printf '</pre>' ) > newfile

一時ファイルがなく、あるコマンドの出力を何か他のもので囲みたい場合は、 の代わりにそのコマンドを挿入できますcat

( printf '<pre>' ; find / -type d -print ; printf '</pre>' ) > somefile

これはすべて、複合コマンドの一部ではなく、複合コマンド全体の出力にリダイレクトを適用することによって機能します。

もちろん、これは要求sedどおりawkには使用されませんが、この種のタスクでは、それらのツールを使用するのはやりすぎです。

答え2

これはどう:

echo "</pre>" >> /path/to/the/file

または、最初は少し複雑で、出力に別のファイルを使用する必要があります。

echo "<pre>" | cat - /path/to/the/file > /path/to/the/newfile

catは連結を意味し、この場合は 2 つの引数があります。 は-標準入力を意味するので、連結されたファイルの最初の部分はそれにパイプされたもの (この場合はecho) になります。 2 番目の引数は、先頭に追加するファイルです。連結されたファイルは に出力されますnewfile

答え3

(GNU) の場合sed(質問のタグに従って):

$ sed -i -e '$a\</pre>' file.in

この意志追加</pre>そこに という線を引くfile.in

あるいは:

$ sed -i -e '$s@\(.*\)@\1</pre>@' file.in

</pre>これはの最後の行に追加されますfile.in

関連情報