MacOS下管道输出至cut命令无返回结果的问题排查
解决MacOS下tail + grep + cut无输出的问题
MacOS自带的是BSD版本的命令行工具,和GNU工具在缓冲机制、参数细节上存在差异,导致你加了cut后无输出。试试下面几种方案:
用sed合并过滤与截断操作(最推荐,减少管道层级)
tail -f log/development.log | sed -n '/mailer/s/^.\{64\}//p'这条命令同时完成了匹配含
mailer的行,以及移除行首前64个字符的操作,避免了多管道的缓冲问题。用awk处理
awk本身支持行级处理,缓冲问题更少:tail -f log/development.log | awk '/mailer/ {print substr($0,65)}'注意awk的
substr是从1开始计数,所以substr($0,65)对应移除前64个字符的效果。调整工具缓冲参数(针对BSD工具)
如果坚持要用grep+cut组合,试试给cut也加上无缓冲配置(MacOS的stdbuf可能需要通过brew额外安装):tail -f log/development.log | grep --line-buffered mailer | stdbuf -i0 -o0 cut -c 64-
内容的提问来源于stack exchange,提问作者Max Williams
相关产品推荐
相关产品推荐

