我发现自己经常使用 linux shell 命令,例如 grep
、sed
和 awk
,来格式化/过滤/转发一些东西更有用。
“源”数据通常是进程的输出,或本地文件的 cat
。
随着我越来越熟练地使用这些命令,我发现自己越来越多地使用它们。我以前使用 notepad++ regex-search&replace 做的事情,现在我知道如何在我的 shell 中“即时”做。
我现在遇到的“问题”是如何处理我从另一个来源“复制”的数据,我想通过 stdin 直接将这些数据输入 shell,而我只想在 stdout 中看到输出.我遇到的问题是输入和输出“纵横交错”。例如:
>awk '$1 == "true" {print $2}'
true Paul
Paul
false John
true Janice
Janice
问题是这对我来说不可用。我需要输出与输入清楚地分开。要么它之后出现,要么我根本不想看到 stdin。
我们该怎么做?我发现我可以使用 tail
来“保存”输入数据,直到它全部被输入:
tail -n 999 | awk '$1 == "true" {print $2}'
true Paul
false John
true Janice
Paul
Janice
这可行,但有点麻烦。
是否有任何内置命令基本上“保持”流直到它结束(或者更确切地说,在处理完所有输入之前不打印任何内容)?或者简单地抑制看到标准输入的方法?我也可以使用临时文件,但我希望有一种“干净的 1 步无开销”的方式...
最佳答案
awk '$1 == "true" {print $2}' | tac | tac
或
awk '$1 == "true" {print $2}' > /tmp/file.txt; cat /tmp/file.txt
关于linux - 如何让 linux 命令在管道传输之前等待输入结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23704927/