linux - 如何在不使用 echo 的情况下更改输出颜色?

标签 linux bash shell

是否可以在不使用 echo 的情况下更改输出颜色? 类似于“将颜色设置为黄色”。

我有一个脚本

#!/bin/bash
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

echo -e ${YELLOW}
cat file.txt | awk 'NR==1 { print $0; }'
echo -e ${BLUE}
cat file.txt | awk 'NR==2 { print $0; }'
echo -e ${NC}

以黄色打印 file.txt 的第一行,以蓝色打印第二行。但它还在我有“echo”命令的地方添加了额外的行。

我试过这样的:

#!/bin/bash
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

${YELLOW} cat file.txt | awk 'NR==1 { print $0; }'
${BLUE} cat file.txt | awk 'NR==2 { print $0; }' ${NC}

但是它不起作用,因为“echo”命令需要-e 参数来显示颜色。

所以我的问题是:我可以在不使用 echo 的情况下更改输出颜色吗?如果没有,如何删除文件行之间的这些额外行?是否可以更正此脚本以不生成额外的行?

当前输出:

 
first line of file.txt

second line of file.txt
 

理想的输出:

first line of file.txt
second line of file.txt

最佳答案

使用 printf

 printf '\e[1;34m%-6s\e[m' "First line of text in BLUE"
 printf '\e[1;31m%-6s\n\e[m' "Second line of text in RED WITH A NEW LINE"

这是一个很小的 ​​bash 函数来执行此操作:

$ cat col.sh
#!/bin/bash

colprint()
{
    printf '\e[1;%dm%-6s\n\e[m' "$1" "$2"
}

# For your input file.
colprint 31 "$(awk 'NR==1{print;}' file.txt)"
colprint 34 "$(awk 'NR==2{print;}' file.txt)"
colprint 33 "$(awk 'NR==3{print;}' file.txt)"

当然在带有颜色的 xterm 上以颜色输出。

关于linux - 如何在不使用 echo 的情况下更改输出颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48324279/

相关文章:

linux - 令人困惑的 shell 语法

python - 当术语在 bash 中显示时终止终端应用程序

linux - 如何在 Ubuntu 9.10 上检查 openCV

linux - 在GDB中调试多线程程序时如何一次继续一个线程?

bash - 如何让 git show --stat 仅列出更改的文件数、插入和删除?

bash - awk、printf 和变量中的方程

linux - 使用 grep 解析多行变量

linux - 在 bash 脚本中扩展变量以在单引号中传递其值

linux - 在 Bash 脚本中执行 R 命令?

linux - 如何让switch执行2个case