我发现自己经常使用的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
Run Code Online (Sandbox Code Playgroud)
问题是这对我不可用。我需要将输出与输入明确分开。要么事后发生,要么我根本不想看stdin。
我们该怎么做?我发现我可以tail用来“保留”输入数据,直到全部输入完毕:
tail -n 999 | awk '$1 == "true" {print $2}'
true Paul
false John
true Janice
Paul
Janice
Run Code Online (Sandbox Code Playgroud)
这可行,但有点麻烦。
是否有任何内置命令基本上可以“保留”流直到流结束(或者,直到处理完所有输入后才打印任何内容)?还是简单地抑制看到stdin的方法?我也可以使用临时文件,但我想采用一种“干净的1步而不会产生开销”的方式...