netcatを使用して取得した入力ストリームがあります。入力ストリームに改行文字が含まれていません。代わりに、改行には4つのスペースが必要です。したがって、4つのスペースをすべて改行文字に置き換える必要があります。
使ってみました
netcat xxxx | sed 's/ /\n/g' | myscript.sh
だから私はsedまたはawkを介してパイピングを試みましたが、成功しませんでした。どちらのコマンドも、置換を処理する前に入力ストリームの改行文字を無期限に待機しているようです。 sedとawkはどちらもファイルで完全に機能しますが、パイプラインの一部である場合はそうではありません。努力中です
RS=' '
または
-F' '
しかし、それも動作しませんでした。 sedとawkはどちらも、入力ファイルで実際の改行文字が見つかるまですべてを食べるように見えますが、決して発生しません。
答え1
はい、バッファリングのために死んでいます。 sedが読もうとしています。ワイヤー。
これは役に立つかもしれません:
input=""
netcat xxx | while IFS= read -r -d "" -n 1 char; do
input+=$char
if [[ $input == *" " ]]; then
echo "${input% }"
output=""
fi
done | yourscript.sh
しかし、第二の側面ではアッより良い方法:入力レコード区切り文字を4つのスペースで定義し、各レコードを印刷します(マルチキャラクタRSはGNU awk機能です)
netcat xxx | gawk -v RS=" " 1 | yourscript.sh
この無限の1行の入力は、bash関数を使用してシミュレートできます。
netcat() { while true; do printf '%d ' $RANDOM; done; }