shell - 做一个 tail -F 直到匹配一个模式

标签 shell sed awk tcl tail

我想做一个tail -F在文件上,直到匹配模式。我找到了一种使用 awk 的方法,但恕我直言,我的命令不是很干净。问题是我需要由于一些限制,只能在一行中完成。

tail -n +0 -F /tmp/foo | \
awk -W interactive '{if ($1 == "EOF") exit; print} END {system("echo EOF >> /tmp/foo")}'
尾部会阻塞直到 EOF出现在文件中。它工作得很好。 END 块是强制性的,因为 awk 的 exit不会立即退出。它使 awkeval退出前的 END 块。 END 块卡在读取调用上(因为 tail),所以我需要做的最后一件事是在文件中写入另一行以强制 tail 退出。
有人知道更好的方法吗?

最佳答案

使用尾部的--pid option 和 tail 将在 shell 死亡时停止。无需向尾文件中添加额外内容。

sh -c 'tail -n +0 --pid=$$ -f /tmp/foo | { sed "/EOF/ q" && kill $$ ;}'

关于shell - 做一个 tail -F 直到匹配一个模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5024357/

相关文章:

linux - 如何使用 Shell 挑选/修剪字符串的一部分

php - AJAX 进度 : Reading output from the Shell

android - 来自具有特殊字符的 macOS 应用程序的 ADB 命令

linux - 使用 sed 有条件地匹配一个词

linux - Ubuntu 16.04 上的 Amazon CLI bash 脚本,if 语句上的 "unexpected operator"(语法看起来正确)

linux - 尝试在 sed 中打印每行的一部分

sed - 如何将查找和替换限制为 CSV 中的一列?

regex - Ubuntu、Bash、awk、正则表达式 -> 在文本文件中找到所有 [numbers] 并打印它们

awk - 重现 grep "my pattern"myfile.log |排序 |独特 | awk 中的 wc -l

python - 无法通过 AWK/Python 使每个句子从 LaTex 中的新行开始