我有一个使用 netcat 获得的输入流。输入流不包含任何换行符。相反,应该有 4 个空格换行。所以我需要用换行符替换每次出现的 4 个空格。
我试图使用
netcat xxxx | sed 's/ /\n/g' | myscript.sh
所以我尝试通过 sed 或 awk 进行管道传输,但没有成功。在处理替换之前,这两个命令似乎都在无限期地等待输入流中的换行符。 sed 和 awk 在文件上都能完美工作,但当它们是管道的一部分时则不然。我正在尝试 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
不过,在第二个方面,awk更好:将输入记录分隔符定义为 4 个空格并打印每条记录(多字符 RS 是 GNU awk 功能)
netcat xxx | gawk -v RS=" " 1 | yourscript.sh
这种永无休止的单行输入可以通过 bash 函数来模拟:
netcat() { while true; do printf '%d ' $RANDOM; done; }