我有一个BASH脚本,可以对文件执行许多操作,例如:
cp input.txt file.tmp1
sed (code) file.tmp1 > file.tmp2
sed (code) file.tmp2 > file.tmp3
sed (code) file.tmp3 > file.tmp4
sed (code) file.tmp4 > file.tmp5
sed (code) file.tmp5 > file.tmp6
sed (code) file.tmp6 > file.tmp7
cp output.txt
这样:
但是,这似乎不是处理文件的理想方式。
答案 0 :(得分:3)
处理临时文件是个不错的主意,但您应该使用mktemp(1)
安全地制作临时文件。
虽然使用多个文件进行多次传递没有任何问题,但可以考虑使用mktemp -d
为所有文件创建一个临时目录,以确保永远不会覆盖用户关心的任何内容。
但如果您永远不会查看中间文件,可以像这样处理多次传递:
sed (code) input.txt | sed (code) | sed (code) | sed (code) | ...
sed (code) > output.txt
如果一个失败,它们都会失败,这可以使错误处理更容易。完成后没有要删除的临时文件。
如果您想检查管道是否有错误,tee
会对您有所帮助。它将所有输入重定向到其标准输出和管道,如下所示:
sed (code) input.txt | sed (code) | tee state-of-pipe.txt | sed (code) | ...
sed (code) > output.txt
您可以使用diff -u input.txt output.txt
检查更改。 diff(1)
是一个行差异计划,-u
统一输出非常容易阅读。 wdiff(1)
是一个单词差异计划,对某些情况可能更有用。
而且xxdiff(1)
是一个极好的GUI界面,用于检查两个文件之间的差异 - 它会努力向您显示单独更改的字符。 (它对于处理CVS和SVN样式的冲突文件也很棒,但这完全是另一回事。)
答案 1 :(得分:1)
更有效的方法是使用管道。 E.g:
cat input.txt | sed ... | ... | sed ... > output.txt
问题在于你无法检查不同阶段的变化。