linux附加文件

时间:2010-12-12 17:14:42

标签: c linux

我有一个程序,我通常这样运行:a.out<guifpgm.txt>gui.html

如果a.out是我编译的c程序,guifpgm.txt是输入文件,gui.html是输出文件。但我真正想做的是获取输出from a.out<guifpgm.txt,而不是仅仅用输出替换gui.html中的任何内容,将输出放在文件的中间。

这样的事情: gui.html包含以下内容:<some html>CODEGOESHERE<some more html> 输出到a.outalert(“这是一些动态生成的东西”);

我希望gui.html包含以下内容:<some html>alert("this is some dynamically generated stuff");<some more html>

我该怎么做?

谢谢!

4 个答案:

答案 0 :(得分:3)

听起来你想替换文字。为此,请使用sed,而不是C:

sed -i s/CODEGOESHERE/alert(\"this is some dynamically generated stuff\")/g gui.html

如果您确实需要运行a.out来获取其输出,请执行以下操作:

sed -i s/CODEGOESHERE/`a.out`/g gui.html

答案 1 :(得分:2)

我最终使用了linux cat函数。 output a.out>guifpgm.txt>output.txt。然后做了cat before.txt output.txt after.txt > final.txt

答案 2 :(得分:1)

简化cat方法就是使用

./a.out < guifpgm.txt | cat header.txt - footer.txt  > final.txt

-替换为STDIN的输入。这有点削减了中间文件。使用>代替>>会覆盖final.txt的内容,而不是附加。

答案 3 :(得分:0)

只是为了它的乐趣......对于需要替换“REPLACE ME”行的程序a.out,模板文件template,awk解决方案如下。这会将结果输出放在output_file.txt

awk '/^REPLACE ME$/{while("./a.out <input.txt"|getline){print $0}getline} {print $0}' template > output_file.txt 

编辑:稍加修正以添加输入文件,删除UUOC并修复一个小错误(a.out的最后一行被打印两次)

或者...... perl:

perl -pe '$_=`./a.out <input.txt` if /REPLACE ME/' template > output_file.txt

虽然专职演员可能会做得更好