输出的 Sed 着色未按预期工作 [英] Sed colorization of output not working as expected

查看:38
本文介绍了输出的 Sed 着色未按预期工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码:

#!/bin/bash

reset=$(tput sgr0)
bold=$(tput bold)

red=$(tput setaf 1)
white=$(tput setaf 7)

pattern[0]='[0-9]'
replacement[0]="${white}${bold}&${reset}"

pattern[1]='[a-z]'
replacement[1]="${red}${bold}&${reset}"

args=()
for (( i=0; i < ${#pattern[@]}; i++ )) ; do
    args+=(-e "s/${pattern[i]}/${replacement[i]}/g")
done

echo "asdf1234" | sed "${args[@]}"

它输出:

asdfmm1mmm2mmm3mmm4m

即添加了额外的 m 个字符,所有字母字符都为红色,数字不突出显示.

i.e. extra m characters are added and all alphabetic characters are red, the digits are not highlighted.

我的愿望是有红色的字母和白色的数字.我该怎么做?

My desire is to have letters in red and digits in white. How can I do this?

推荐答案

试试这个:

#!/bin/bash

reset=$(tput sgr0)     # \001
bold=$(tput bold)      # \002

red=$(tput setaf 1)    # \003
white=$(tput setaf 7)  # \004

pattern[0]='[0-9]'
replacement[0]=$'\004\002&\001'

pattern[1]='[a-z]'
replacement[1]=$'\003\002&\001'

args=()
for (( i=0; i < ${#pattern[@]}; i++ )) ; do
    args+=(-e "s/${pattern[i]}/${replacement[i]}/g")
done

echo "asdf1234" | sed "${args[@]}" \
    | sed -e $'s/\001/'$reset'/g'  \
          -e $'s/\002/'$bold'/g'   \
          -e $'s/\003/'$red'/g'    \
          -e $'s/\004/'$white'/g'

我系统上的输出:

这篇关于输出的 Sed 着色未按预期工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆