【发布时间】:2019-10-18 14:41:58
【问题描述】:
我正在运行一个具有多个多行输出的脚本 input.sh,如下所示:
echo -e 'first \n second'
echo -e 'first \n second'
echo -e 'first \n second'
我无法控制这个文件,我只知道它会有多个多行输出。
我需要能够在该文件输出消息时实时对该文件的每个单独输出进行操作。缓冲是一个问题,但不是我在这里要问的问题。
我正在简化一点,但我的问题归结为:我想在每个单独的输出末尾插入一个袋鼠。请参阅下面的尝试:
./input.sh | sed 's/$/kangaroo/'
上面的这个版本在每个换行符之后插入一个袋鼠,而不是每个多行输出。
./input.sh | perl -0777 -pe 's/$/kangaroo/'
此 perl 版本仅在所有输出完成后插入一只袋鼠(总共一只袋鼠,而不是每次输出一只袋鼠。)
我尝试过其他变体,但总是一个或另一个——每一个新行后面都有一个袋鼠,或者每件事后面都有一个袋鼠。我尝试使用tr 将新行替换为表单提要,但这并没有任何区别。
如何做到这一点?
顺便说一句,我已经仔细阅读了this question 及其答案,但他们正在讨论对文件进行操作。我无法将那里描述的原则应用于管道并从标准输入读取。
【问题讨论】:
-
您可以控制脚本的执行吗?换句话说,您是否可以控制执行
input.sh的脚本?您可以在执行期间修改脚本吗? -
是的,但实际上我正在处理许多内容不可预测的脚本。 Input.sh 是代表许多 bash、python 或 ruby 脚本的替身。
-
你到底想对这个输出做什么?与其抽象问题并要求一个非常狭窄的理想,为什么不发布您的实际输入和期望的输出?
-
我试图区分脚本中的各个输出,就这么简单。我想和他们做一些与问题完全无关的事情。我不明白告诉您我希望对这些多行输出应用哪些转换会有所帮助,因为它与上述问题无关。
-
当我想到您可能想要做的事情时,首先想到的是:测量脚本中命令的响应时间。这是你更高层次的目标吗?
标签: bash perl unix sed pipeline