你有两个问题。第一个是您的sed命令没有按照您的预期执行。让我们先解决这个问题。我猜你想用粗体绿色写用户,其余的默认为非粗体。这应该更好:
#!/bin/bash
bold="\e[1m"
unbold="\e[0m"
green="\e[32m"
default="\e[39m"
who | sed "s/^\([[:alpha:]_]\+\)\(.*\)/$bold$green\1$default$unbold\2/"
还是真的更好?你看到的是丑陋的代码而不是漂亮的颜色。这是你的第二个问题。这就是我们将如何解决它:
#!/bin/bash
bold=$'\e[1m'
unbold=$'\e[0m'
green=$'\e[32m'
default=$'\e[39m'
who | sed "s/^\([[:alpha:]_]\+\)\(.*\)/$bold$green\1$default$unbold\2/"
或者,如果您不喜欢ANSI-C 引用:
#!/bin/bash
bold=$(echo -e "\e[1m")
unbold=$(echo -e "\e[0m")
green=$(echo -e "\e[32m")
default=$(echo -e "\e[39m")
who | sed "s/^\([[:alpha:]_]\+\)\(.*\)/$bold$green\1$default$unbold\2/"
笔记。在bash中使用大写变量名被认为是非常糟糕的做法。我知道你会看到很多人这样做,但这确实是错误的。这就是为什么我小写你所有的变量。