[英]Linux command to replace characters from stdin without '\n'
我运行一个像 nc 这样的命令,它输出类似{"foo1":"bar1"}{"foo2":"bar2"}
,连续没有换行符。 我想改变输出如下:
{"foo1":"bar1"}
{"foo2":"bar2"}
我试过nc -U /dev/mysocket | sed 's/}/}\n/g'
nc -U /dev/mysocket | sed 's/}/}\n/g'
,但它不起作用。 如果sed
没有 '\n',似乎它不会处理输入。
如果您没有可以输出上述示例的nc
服务器。 它更像是 hello.c 的以下输出:
#include <stdio.h>
#include <unistd.h>
int main()
{
while (1) {
printf("{\"foo1\":\"bar1\"}");
fflush(0);
sleep(1);
}
return 0;
}
于是案例变成: gcc -o hello hello.c; ./hello | sed 's/}/}\n/g'
gcc -o hello hello.c; ./hello | sed 's/}/}\n/g'
gcc -o hello hello.c; ./hello | sed 's/}/}\n/g'
将不起作用。 如果没有 '\n',似乎 sed 甚至不处理输入流。 关于如何解决这个问题的任何想法? 谢谢你。
您可以使用awk
:
echo '{"foo1":"bar1"}{"foo2":"bar2"}' | awk -v RS='}' -v ORS='}\n' 'NF'
{"foo1":"bar1"}
{"foo2":"bar2"}
否则,您可以使用此sed
:
echo '{"foo1":"bar1"}{"foo2":"bar2"}' | sed $'s/}{/}\\\n{/g'
{"foo1":"bar1"}
{"foo2":"bar2"}
如果你有gnu sed
那么以下也可以工作:
echo '{"foo1":"bar1"}{"foo2":"bar2"}' | gsed 's/}{/}\n{/g'
{"foo1":"bar1"}
{"foo2":"bar2"}
但是请注意,您的输入是一个 JSON,您可以使用jq
来获得漂亮的打印效果:
echo '{"foo1":"bar1"}{"foo2":"bar2"}' | jq .
{
"foo1": "bar1"
}
{
"foo2": "bar2"
}
要插入换行符 (\n),请将其与&
一起使用,如下所示:
nc -U /dev/mysocket | sed 's/}/}&\n/g'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.