参考资料
- 【Linux】ハイフンをいっぱい出したかっただけなのに【printfコマンド】
目录
- 一. echo命令
- 1.1 -n 选项
- 1.2 -e 选项
- 1.3 配合扩展实现批量换行输出
- 1.3.1 `xargs -n 1`
- 1.3.2 `tr ' ' '\n'`
- 1.3.3 `xargs printf "%s\n"`
- 1.4 ANSI转义序列
- 1.5 彩色文本输出
- 二. printf 命令
- 2.1 基本语法
- 2.2 %s 格式化字符串
- 2.3 %d 格式化整数
- 2.4 %f 格式化小数
- 2.5 生成指定数量的横线
一. echo命令
1.1 -n 选项
⏹echo命令默认情况下会输出换行符,通过-n
选项可以不输出结尾的换行符。
fengyehong@ubuntu:~$ echo "HELLO WORLD"
HELLO WORLD
fengyehong@ubuntu:~$
# 使用了 -n 选项,因此换行符消失
fengyehong@ubuntu:~$ echo -n "HELLO WORLD"
HELLO WORLDfengyehong@ubuntu:~$
1.2 -e 选项
⏹启用解释反斜杠转义字符
(如 \n
换行、\t
制表符等)。
# 未使用 -n 之前,只会原样输出
fengyehong@ubuntu:~$ echo "HELLO\nWORLD!"
HELLO\nWORLD!
fengyehong@ubuntu:~$
fengyehong@ubuntu:~$ echo -e "HELLO\nWORLD!"
HELLO
WORLD!
1.3 配合扩展实现批量换行输出
1.3.1 xargs -n 1
fengyehong@ubuntu:~$ echo file_{01..03}.{mp{3..4},mp{a,b,p,v}} | xargs -n 1
file_01.mp3
file_01.mp4
file_01.mpa
file_01.mpb
file_01.mpp
file_01.mpv
file_02.mp3
file_02.mp4
file_02.mpa
file_02.mpb
file_02.mpp
file_02.mpv
file_03.mp3
file_03.mp4
file_03.mpa
file_03.mpb
file_03.mpp
file_03.mpv
1.3.2 tr ' ' '\n'
fengyehong@ubuntu:~$ echo file_{01..03}.{mp{3..4},mp{a,b,p,v}} | tr ' ' '\n'
file_01.mp3
file_01.mp4
file_01.mpa
file_01.mpb
file_01.mpp
file_01.mpv
file_02.mp3
file_02.mp4
file_02.mpa
file_02.mpb
file_02.mpp
file_02.mpv
file_03.mp3
file_03.mp4
file_03.mpa
file_03.mpb
file_03.mpp
file_03.mpv
1.3.3 xargs printf "%s\n"
fengyehong@ubuntu:~$ echo file_{01..03}.{mp{3..4},mp{a,b,p,v}} | xargs printf "%s\n"
file_01.mp3
file_01.mp4
file_01.mpa
file_01.mpb
file_01.mpp
file_01.mpv
file_02.mp3
file_02.mp4
file_02.mpa
file_02.mpb
file_02.mpp
file_02.mpv
file_03.mp3
file_03.mp4
file_03.mpa
file_03.mpb
file_03.mpp
file_03.mpv
1.4 ANSI转义序列
⏹echo可以通过-e
选项,配合ANSI转义序列
来实现彩色文本的输出。
- ANSI 转义序列的格式
\e
或\033
:表示转义序列的开始。[
: 紧跟在\e
后,表示开始颜色代码。0m
:表示重置样式,恢复到默认颜色。
\033[<样式>;<前景色>;<背景色>m<文本>\033[0m
\e[<样式>;<前景色>;<背景色>m<文本>\e[0m
⏹常用颜色代码
- 前景色(文本颜色)
- 30:黑色
- 31:红色
- 32:绿色
- 33:黄色
- 34:蓝色
- 35:紫色
- 36:青色
- 37:白色
- 背景色
- 40:黑色
- 41:红色
- 42:绿色
- 43:黄色
- 44:蓝色
- 45:紫色
- 46:青色
- 47:白色
- 文本样式
- 0:重置/普通文本
- 1:加粗
- 4:下划线
1.5 彩色文本输出
⏹配合ANSI转义序列
,实现文本彩色输出
使用 ANSI 转义码时,记得在希望重置颜色或样式的地方加上
\033[0m
- 或者
\e
这将恢复终端的默认显示方式。
echo -e "\e[31m我是红色文本\e[0m"
echo -e "\e[1;32m绿色加粗字体\e[0m"
echo -e "\e[4;33m黄色文本带下划线\e[0m"
echo -e "\e[37;44m白色文本,蓝色背景\e[0m"
echo -e "\e[31m红色文字\e[0m \e[32m绿色文字\e[0m \e[34m蓝色文字\e[0m"
⏹效果如下
二. printf 命令
2.1 基本语法
- ⏹选项
%s
:字符串%d
:整数\n
:换行符\t
:制表符
- ⏹注意事项
- printf 不会自动换行,必须显式添加
\n
。 - printf 也可以结合
ANSI 转义序列
实现彩色输出。
- printf 不会自动换行,必须显式添加
printf FORMAT [ARGUMENT]...
2.2 %s 格式化字符串
⏹printf 输出默认不会添加换行符,需要手动添加\n
换行符
fengyehong@ubuntu:~$ printf "%s\n" .{mp{3..4},mp{a,b,p,v}}
.mp3
.mp4
.mpa
.mpb
.mpp
.mpv
2.3 %d 格式化整数
seq 1 10
:生成1到10的数字%03d
:整数格式化为3位
fengyehong@ubuntu:~$ seq 1 10 | xargs printf "value: %03d\n"
value: 001
value: 002
value: 003
value: 004
value: 005
value: 006
value: 007
value: 008
value: 009
value: 010
2.4 %f 格式化小数
shuf -i 10-99 -n 3
:随机从 10 到 99 的整数范围内生成 3 个数。awk '{printf "%.1f\n", $1/10}'
:将生成的整数除以 10,并保留 1 位小数。
# 将随机生成的3个小数放入nums变量中
fengyehong@ubuntu:~$ nums=$(shuf -i 10-99 -n 3 | awk '{printf "%.1f\n", $1/10}')
# 查看变量内容
fengyehong@ubuntu:~$ echo $nums
6.0 3.3 5.1
⏹小数格式化
fengyehong@ubuntu:~$ echo $nums | xargs printf "%.2f\n"
6.00
3.30
5.10
2.5 生成指定数量的横线
⏹先生成与数量相匹配的带横线的数字
fengyehong@ubuntu:~$ printf "%s-" {0..30} | xargs printf "%s\n"
0-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-20-21-22-23-24-25-26-27-28-29-30-
⏹然后通过tr
命令删除所有的数字之后,再通过awk
命令打印之后,就可以得到我们想要的指定数量的横线了。
fengyehong@ubuntu:~$ printf "%s-" {0..30} | tr -d '[0-9]' | awk '{print}'
-------------------------------