bash中使用正则处理带颜色文本

bash中使用正则处理带颜色文本

就在昨天, 我在mohist端上测试minecraftctl新出的listen功能时,发现出现了诡异的一幕, 正则表达式无法匹配到玩家发出的消息

定位问题

在漫长的debug后, 最终将问题定位到了文字颜色上面, 似乎正则表达式不能正确的在不同颜色的文本中匹配. 我逐渐反应过来, bash中的带颜色文本使用的是一种特殊的控制字符,这种字符看起来长这样: \x1b[1;30m, 要注意的是, 前面的\x1b是不可见字符, 在经过对照后,此字符代表的是Esc, 也就是linux中最喜欢的控制字符. 我最开始想通过正则绕过这个问题, 但是转念一想, 我为什么不把它删掉呢?

最终解决方案

于是我设计出了如下的正则表达式, 恰恰好能解决问题

# 用管道传入此命令将颜色控制字符删掉,之后就能正常的使用正则匹配文本了
sed 's/[[:cntrl:]]\[[0-9;]*[mK]//g'

参考资料

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇