我正在使用一个软件,该软件读取具有多个条目的跟踪文件,每个条目的格式为:
<...>,<...>,<64 character string>
在我的例子中,这个 64 个字符的字符串完全由“0”组成。
是否可以有像 sed 这样的文件流(不是标准输入,使用 open 系统调用打开的文件流)之类的东西,这将允许我向所述程序提供一个包含以下条目的文件:
<...>,<...>,&
程序会将“&”替换为 64 个“0”。在执行程序之前对跟踪文件本身使用 sed 的问题在于机器上的可用空间有限。
我当前的计划是使用 ptrace 拦截读取系统调用,并使程序看起来就像正在读取普通文件一样,这是一个好主意吗?
(编辑)
该程序仅解析该文件一次。
答案1
sed 's/,[^,]*$/,\&/' <file | program /dev/stdin
这假定程序必须在命令行上给出文件名,并且它不会尝试在文件中向后或向前搜索(标准输入通常不可搜索)。
特殊文件/dev/stdin
将包含进程的标准输入流的内容。上面,我们利用这一事实,file
在命令行上使用标准 Unix 管道将修改后的内容发送给程序,即使程序通常不读取其标准输入流。
该表达式将用 替换每sed
行最后一个逗号之后的所有内容。file
&