是否可以在不使用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
答案 0 :(得分:2)
使用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
上用颜色输出颜色。
答案 1 :(得分:2)
echo -e -n "$YELLOW"
-n
:不添加额外的换行符
答案 2 :(得分:2)
使用tput
:
#!/bin/bash
yellow() { tput setaf 3; }
blue() { tput setaf 4; }
nc() { tput sgr0; }
[[ -t 1 ]] || export TERM=dumb
yellow
cat file.txt | awk 'NR==1 { print $0; }'
blue
cat file.txt | awk 'NR==2 { print $0; }'
nc
这样您就不必硬编码终端代码,终端类型和功能将得到尊重。例如,如果您使用的终端不支持颜色,那么您将获得未着色的文本而不是垃圾。
这里,当stdout
不是终端时,使用相同的功能来获取未着色的文本,这是规范的Unix行为,以避免在管道到其他程序时出现问题。