作者:园园哚 | 来源:互联网 | 2022-10-22 11:18
我正在运行一个脚本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
换页符替换新行,但这并没有任何区别。
如何才能做到这一点?
顺便说一句,我已经仔细阅读了这个问题及其答案,但是他们正在讨论对文件的操作。我无法将此处描述的原理应用于管道并从stdin中读取。
1> ikegami..:
没有办法区分
echo -e 'first\nsecond'
echo -e 'first\nsecond'
echo -e 'first\nsecond'
从
echo -e 'first\nsecond\nfirst'
echo -e 'second\nfirst\nsecond'
两者都输出以下字节流(以十六进制表示):
66 69 72 73 74 0A 73 65 63 6F 6E 64 0A 66 69 72 73 74 0A 73 65 63 6F 6E 64 0A 66 69 72 73 74 0A 73 65 63 6F 6E 64 0A
流不包含有关这些字节的含义或如何组装的任何信息。充其量,可能会有时间上的差异。