如何确保使用sed w命令写入的文件已关闭

时间:2014-07-27 15:19:59

标签: shell sed

我正在使用sed'w'命令从TeX文档中获取标签:

/\\label{[a-zA-Z0-9]*}/w labels.list

此脚本是管道的一部分,稍后,awk将读取刚刚编写的sed文件。 e.g

cat bob | sed -f sedScript | awk -f awkScript labels.list -

有时管道产生正确的输出,有时它不产生(对于完全相同的输入文件'bob')。这是随机的。

我只能得出结论,有时awk会在sed正确关闭之前尝试读取文件。无论如何我可以强制sed在脚本结束时关闭文件,或者有什么其他建议可以解决问题吗?

1 个答案:

答案 0 :(得分:0)

管道中的所有阶段并行运行。这是管道的一个非常重要和定义的特征,没有什么可以或应该尝试做以防止或绕过它。

相反,您应该重写脚本,以便按照您需要的顺序执行和完成所有数据依赖项。在一般情况下,你做

cat bob | sed -f sedScript > tempfile
cat tempfile | awk -f awkScript labels.list -

或等同于您的情况:

grep '\\label{[a-zA-Z0-9]*}' bob > labels.list
awk -f awkScript labels.list bob