前言
echo、sort、uniq、tr、cut
echo 输出
“echo”命令在Linux中用于在标准输出设备(通常是终端或屏幕)上显示一行文本。这个命令不仅可以用来显示文本,还可以插入环境变量的值,甚至可以用于测试其他命令的输出。简而言之,echo是向终端输出文本的简单工具。
!!#ffff00 基本用法!!
echo [选项] [字符串]
其中,[选项]
是可选的,而[字符串]
是你想要输出的文本内容。
无选项用法:
最简单的echo
命令使用方式是直接跟上想要输出的文本:
[root@c1 ~]# echo 向日葵,sunflower
向日葵,sunflower
常用选项:
|选项 |作用 | |:--| |\n |插入换行符,输出换行 | |\r |光标移至行首,并且不换行 | |\s |当前shell的名称,如bash | |\t |插入Tab键(即制表符) | |\f |换行,但光标仍停留在原处 | |\ \ |表示插入\本身 | |\b |插入退格键,表示退格,不显示前一个字符 | |\c |抑制更多的输出或不换行 |
在echo
命令中,可以使用转义字符\n
来表示换行 需要结合-e
进行使用 会在终端中输出两行文本
[root@c1 ~]# echo -e "first line \nsencond line"
first line
sencond line
插入环境变量 比如显示当前用户的主目录
oot@c1 ~]# echo home is:$HOME
home is:/root
-n
选项可以让echo
命令在输出结束后不自动换行。这在需要连续输出多个字符串时非常有用
[root@c1 ~]# echo -n "hello word"
hello word[root@c1 ~]#
-s
选项可以让echo
命令在输出结束后不输出换行符,这对于脚本编写中需要连续输出多个字符串的情况非常有用:
echo -s "Hello, " "Linux!"
-E
选项可以让echo
命令忽略未设置的环境变量。这意味着,如果某个环境变量没有被设置,echo
不会输出一个空行或者问号,而是直接忽略该变量:
echo -E "This is a test: $UNSET_VAR"
This is a test:
如果UNSET_VAR
没有被设置,上述命令只会输出This is a test:
,而不会输出任何关于未设置变量的错误信息。
小拓展 打印颜色
[root@c1 ~]# echo -e '\033[43;31;1;5mhahahha\e[0m'
hahahha
具有颜色的字符,其格式如下: 字符背景颜色字体颜色字符串 "\033[字符背景颜色;字体颜色𝑚字符串\033[0𝑚" \033[30m -- \033[37m 设置前景色 \033[40m -- \033[47m 设置背景色
#字符背景颜色范围: 40--47
40:黑
41:红
42:绿
43:黄
44:蓝
45:紫
46:深绿
47:白色
#字体颜色: 30--37
30: 黑
31: 红
32: 绿
33: 黄
34: 蓝
35: 紫
36: 深绿
37: 白色
加颜色只是以下控制码中的一种,下面是常见的一些ANSI控制码:
\033[0m 关闭所有属性
\033[1m 设置高亮度
\033[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[nA 光标上移n行
\033[nB 光标下移n行
\033[nC 光标右移n列
\033[nD 光标左移n列
\033[x;yH 设置光标位置x行y列
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\033[?25h 显示光标
\033[2J\033[0;0H 清屏且将光标置顶
释放内存
sudo sh -c 'echo 1 > /proc/sys/vm/drop_caches'
sudo sh -c 'echo 2 > /proc/sys/vm/drop_caches'
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches' #常用
sort 排序
sort将文件的每一行作为一个单位相互比较,比较原则是从首字符向后依次按ASCII码进行比较,最后将他们按升序输出。(以行为单位排序输出) 语法格式:
sort [选项] 参数
cat file | sort 选项
常用选项:
|常用选项 |效果 | |:--| |-n |按照数字进行排序(默认升序) | |-r |反向排序(倒序) | |-u |在输出行中去除重复行 | |-t |指定字段分隔符,默认使用Tab键分隔 | |-k |指定排序字段(不指定则默认第一个字段) | |-f |忽略大小写,会将小写字母都转换为大写字母来进行比较 | |-b |忽略每行前面的空格 | |-o <输出文件> |将排序后的结果转存到指定文件中 |
先新建一个文件 随机输入字符。
[root@c1 ~]# cat ceshi.t
1 2 3
a b c a b z
1 1 1 3 5
c
b
b
n
不加任何选项,则默认按首字母排序。
[root@c1 ~]# sort ceshi.t
1 1 1 3 5
1 2 3
a b c a b z
b
b
c
n
!!#ffff00 sort -n!! 按照数字排序 默认升序
[root@c1 ~]# sort -n ceshi.t
a b c a b z
b
b
c
n
1 1 1 3 5
1 2 3
3
4
6
!!#ffff00 sort -u 去重重复行!!
[root@c1 ~]# cat ceshi.t
apple
banana
orange
pear
apple
[root@c1 ~]# sort -u ceshi.t
apple
banana
orange
pear
sort -t,指定分隔符。-k,指定对第几个字段进行排序。
[root@c1 ~]# sort -t ":" -k 3 -n /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
tr 替换 压缩 删除
tr命令常用来对来自标准输入的字符进行替换、压缩和删除。
cat 文件 | tr [选项] 参数
常用选项: |选项 |效果 | |:--| |-c |保留字符集1的字符,其他字符包括换行符\n用字符集2替换 | |-d |删除所有属于字符集1的字符 | |-s |将连续重复的字符串压缩成一个 | |-t |字符集2 替换 字符集1,不加选项效果相同 |
比如:
[root@c1 ~]# echo 192.168.64.20 |tr "." ":" # . 替换成 :
192:168:64:20
常用项
小写字母替换成大写字母
[root@c1 ~]# echo ddc |tr 'a-z' 'A-Z'
DDC
!!#ffff00 遇见小d 换成大D 显示。!!
[root@c1 ~]# echo ddc |tr 'd' 'D'
DDc
!!#ffff00 -c,保留字符集1的字符,其他字符包括换行符\n用字符集2替换!!
[root@c1 ~]# echo -e "adb \ncba \nab"
adb
cba
ab
[root@c1 ~]# echo -e "adb \ncba \nab" |tr -c "ab\n" "0"
a0b0
0ba0
ab
!!#ffff00 -d,删除所有遇见的字符集 1!!
[root@c1 ~]# echo -e "adb \ncba \nab" |tr -d "a"
db
cb
b
!!#ffff00 -s,将连续重复的字符串压缩成一个。!!
[root@c1 ~]# echo "wwwwwhat?" |tr -s "w"
what?
!!#ffff00 过滤出文本中的非空行!!
[root@c1 ~]# cat ceshi.t
apple
banana
orange
pear
apple
[root@c1 ~]# cat ceshi.t |tr -s "\n" #过滤出非空行 和grep -v “^$”
apple
banana
orange
pear
apple
cut截取字段 切列
用于显示行中的指定部分,删除文件中指定字段。 语法: cut 选项 参数 cat file | cut 选项 参数
常用选项 效果
|选项 |作用 | |:--| |-d |指明分隔符(默认分隔符为Tab) | |-f 数字(常用) |按字段进行截取。指定第n个字段;1-3表示连续1到3字段;1,4,7表示第1、第4、第7个字段 | |-b |以字节为单位进行截取 | |-c |以字符为单位进行截取 | |–complement |排除所指定的字段 | |–output-delimiter |更改输出内容的分隔符 |
-d 指定分隔符 f 3 取第三列 。
[root@c1 ~]# cut -d ":" -f 3 /etc/passwd
0
1
2
3
4
5
6
7
-c 按照数字 取字符。
[root@c1 ~]# i=123456
[root@c1 ~]# echo $i
123456
[root@c1 ~]# echo $i |cut -c 1,3 #取第一和第三字符
13
[root@c1 ~]# echo $i |cut -c 1-3 #取1-3字符串。
123