我运行一个像nc这样的命令,输出类似{"foo1":"bar1"}{"foo2":"bar2"}
的内容,不连续换行。
我想更改输出如下:
{"foo1":"bar1"}
{"foo2":"bar2"}
我尝试了nc -U /dev/mysocket | sed 's/}/}\n/g'
,但它不起作用。如果sed
没有'\ n',则nc
似乎不会处理输入。
如果您没有可以输出上述样本的#include <stdio.h>
#include <unistd.h>
int main()
{
while (1) {
printf("{\"foo1\":\"bar1\"}");
fflush(0);
sleep(1);
}
return 0;
}
服务器。它更像是hello.c的以下输出:
gcc -o hello hello.c; ./hello | sed 's/}/}\n/g'
所以案件结果如下:
.main-box{
background:#ddd;
width:300px;
height:100px;
display:inline-block;
position:relative;
text-align:center;
}
.main-box:after{
content:'';
width: 0;
height: 0;
border-bottom: 70px solid #999;
border-right: 70px solid transparent;
position:absolute;
left:0;
bottom:0;
}
.main-box:before{
content:'';
width: 0;
height: 0;
border-bottom: 70px solid #999;
border-left: 70px solid transparent;
position:absolute;
right:0;
bottom:0;
}
无效。如果没有'\ n',似乎sed甚至不处理输入流。
关于如何解决这个问题的任何想法?谢谢。
答案 0 :(得分:7)
您可以使用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"
}
答案 1 :(得分:0)
要插入换行符(\ n),请将其与&
一起使用,如下所示:
nc -U /dev/mysocket | sed 's/}/}&\n/g'