簡體   English   中英

Linux命令替換標准輸入中沒有'\n'的字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM