oli*_*ver 1 linux bash awk sed
我运行像nc这样的命令,它输出的内容就像{"foo1":"bar1"}{"foo2":"bar2"}没有换行一样.我想更改输出如下:
{"foo1":"bar1"}
{"foo2":"bar2"}
Run Code Online (Sandbox Code Playgroud)
我试过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;
}
Run Code Online (Sandbox Code Playgroud)
事实证明:
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"}
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用此sed:
echo '{"foo1":"bar1"}{"foo2":"bar2"}' | sed $'s/}{/}\\\n{/g'
{"foo1":"bar1"}
{"foo2":"bar2"}
Run Code Online (Sandbox Code Playgroud)
如果你有gnu sed以下也将工作:
echo '{"foo1":"bar1"}{"foo2":"bar2"}' | gsed 's/}{/}\n{/g'
{"foo1":"bar1"}
{"foo2":"bar2"}
Run Code Online (Sandbox Code Playgroud)
但是请注意您的输入是JSON,您可以使用jq以获得漂亮的打印:
echo '{"foo1":"bar1"}{"foo2":"bar2"}' | jq .
{
"foo1": "bar1"
}
{
"foo2": "bar2"
}
Run Code Online (Sandbox Code Playgroud)