输出的 Sed 着色未按预期工作 [英] Sed colorization of output not working as expected
本文介绍了输出的 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屋!
查看全文