sedはストリームエディタに似ており、オープンシステムコールを使用してファイルを開きます。

sedはストリームエディタに似ており、オープンシステムコールを使用してファイルを開きます。

私は複数の項目を含むトレースファイルを読み取るソフトウェアを使用しています。各項目は次の形式になっています。

<...>,<...>,<64 character string>

私の場合、64文字の文字列はすべて「0」で構成されています。

次のエントリを含むファイルをそのプログラムに提供できるsedファイルストリーム(stdinではなくオープンシステムコールを使用して開かれたファイルストリーム)のようなものを持つことはできますか?

<...>,<...>,&

プログラムは「&」を64の「0」に置き換えます。プログラムを実行する前にトレース・ファイル自体で sed を使用する際の問題は、システムで使用可能なスペースが限られていることです。

現在の計画は、ptraceを使用して読み取りシステムコールを傍受し、プログラムが通常のファイルを読み取るように見えるようにすることです。これは良い考えですか?


(編集する)
プログラムはファイルを一度だけ解析します。

答え1

sed 's/,[^,]*$/,\&/' <file | program /dev/stdin

これは、プログラムがコマンドラインにファイル名を指定しなければならず、ファイルから前後に検索しようとしないと仮定します(標準入力は通常検索できません)。

特殊ファイルには、/dev/stdinプロセスの標準入力ストリームの内容が含まれます。上記では、プログラムが通常file標準入力ストリームを読み取らない場合でも、変更内容をプログラムに送信するためにコマンドラインで標準のUnixパイプを使用してこの事実を利用しました。

sedこの式は、各行の最後のコンマの後のすべての内容をで置き換えます。file&

関連情報