sed 类似流编辑器,使用 open 系统调用打开文件

sed 类似流编辑器,使用 open 系统调用打开文件

我正在使用一个软件,该软件读取具有多个条目的跟踪文件,每个条目的格式为:

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

在我的例子中,这个 64 个字符的字符串完全由“0”组成。

是否可以有像 sed 这样的文件流(不是标准输入,使用 open 系统调用打开的文件流)之类的东西,这将允许我向所述程序提供一个包含以下条目的文件:

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

程序会将“&”替换为 64 个“0”。在执行程序之前对跟踪文件本身使用 sed 的问题在于机器上的可用空间有限。

我当前的计划是使用 ptrace 拦截读取系统调用,并使程序看起来就像正在读取普通文件一样,这是一个好主意吗?


(编辑)
该程序仅解析该文件一次。

答案1

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

这假定程序必须在命令行上给出文件名,并且它不会尝试在文件中向后或向前搜索(标准输入通常不可搜索)。

特殊文件/dev/stdin将包含进程的标准输入流的内容。上面,我们利用这一事实,file在命令行上使用标准 Unix 管道将修改后的内容发送给程序,即使程序通常不读取其标准输入流。

该表达式将用 替换每sed行最后一个逗号之后的所有内容。file&

相关内容