gpt4 book ai didi

perl - 如何在 perl oneliner 中进行无缓冲替换?

转载 作者:行者123 更新时间:2023-12-05 08:01:31 24 4
gpt4 key购买 nike

我有一个包装 mvn (Apache Maven) 的 bash 脚本,用于为其输出添加颜色。它所做的简化版本是:

mvn "$@" | sed -e "s/^\[INFO\] \-.*/$bldblu&$rst/g"

其中 $bldblu 是粗体蓝色的 ANSI 颜色转义字符,$rst 重置颜色。

我遇到的问题是有时 mvn 写的一行不以换行符结尾,因此(据我所知)sed 一直在等待输入并且从不打印提示(这让它看起来像Maven 挂了)。我已经尝试将 -u 添加到 sed,但这只会强制 sed 进行逐行缓冲,而不是缓冲多行 - 对我没有帮助。

到目前为止,这是我想出的:

mvn "$@" | perl -pe "$| = 1; s/^(\[INFO\] \-.*)/$bldblu\$1$rst/g"

但我认为这里使用-p 是不正确的。有帮助吗?

最佳答案

替换可能有点矫枉过正,尤其是当替换模式中包含特殊字符时。这个怎么样?

export bldblu
export rst
mvn "$@" | perl -pe 'if(/^.INFO. -/){ $_=$ENV{bldblu}.$_.$ENV{rst} }'

或者与其重新发明轮子

mvn "$@" | perl -MTerm::ANSIColor -pe 
'$_=color("bold blue").$_.color("reset") if /^.INFO. -/'

关于perl - 如何在 perl oneliner 中进行无缓冲替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13452125/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com