目录
- cut
- sort
- wc
- uniq
- tee
- tr
- split
- 扩展知识
1. cut
数据截取, 以行为单位进行
1.1 用法
echo $PATH | cut -d '
1.2 选项
-
-d 'x'
: delimiter, 设定用以分隔数据的分隔符, 与-f
一起使用 -
-f #
:field, 选择每行需要截取的以-d
指定的符号或关键字进行分隔的区域, 从1开始, 与-f
一起使用 -
-c #-#
:characters, 以字符为单位进行分隔, 后接字符区间
1.3 示例
- 以':'为分隔符, 截取 PATH 变量中的第一个路径
cut -d ':' -f 1
[root@choco-01 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@choco-01 ~]# echo $PATH | cut -d ':' -f 1
/usr/local/sbin
- 截取 history 命令显示的信息中的命令部分
history 5 | cut -c 7-
[root@choco-01 tmp]# history 5 | cut -c 7-
which cd
cd /tmp/
ls
vim aaa
history 5 | cut -c 7-
- 截取 history 命令显示的信息中的排序字段(注意: history命令的显示结果是以空格开始的)
history 5 | cut -c 2-5
[root@choco-01 tmp]# history 5 | cut -c 2-5
1085
1086
1087
1088
1089
2. sort
排序用. 既然是排序, 就会涉及语系、以英文or数字进行排序等内容
2.1 用法
sort [-fbMnrtuk] [file or stdin]
2.2 选项
-
-f
:忽略大小写 -
-b
:忽略最前面的空格部分 -
-M
:以月份进行排序,如:JAN,Feb,...,Dec -
-n
:以纯数字进行排序(默认是以字母进行排序) -
-r
:反响排序 -
-u
:相当于uniq,相同的数据只出现一行 -
-t
:分隔符,默认是 tab 键 -
-k
:以哪个 field 来进行排序,常与-t
配合使用
2.3 示例
- 进行默认排序
[root@choco-01 ~]# head -5 /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
[root@choco-01 ~]# head -5 /etc/passwd | sort
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
- 以 UID 字段对 /etc/passwd 进行排序
[root@choco-01 ~]# head -10 /etc/passwd | sort -t ':' -k 3
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
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 那一行了吗?怎么11排到了这里?——因为没有采用数字排序法
[root@choco-01 ~]# head -10 /etc/passwd | sort -t ':' -k 3 -n
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 # 这会就OK啦
3. wc
如果想知道某个文件或输出信息的行数、字符数、字数,怎么办?
—— world counts 用 wc
3.1 用法
wc -[lwm]
3.2 选项
- 无选项:同时列出行数、词数、字符数
-
-l
:仅列出行数 -
-w
:仅列出词数 -
-m
:仅列出字符数
3.3 示例
- 显示文件的行数、词数、字符数
[root@choco-01 ~]# wc /etc/passwd
24 36 1120 /etc/passwd
- 仅显示行数 or 词数 or 字符数
[root@choco-01 ~]# wc /etc/passwd -l
24 /etc/passwd
[root@choco-01 ~]# wc /etc/passwd -w
36 /etc/passwd
[root@choco-01 ~]# wc /etc/passwd -c
1120 /etc/passwd
4. uniq
去重。排完序后,重复的内容显示太多?或者想统计每种重复的内容出现了几次?
—— 用uniq
4.1 用法
uniq -[ic]
4.2 选项
-
-i
:忽略大小写 -
-c
:计算每种内容重复的次数
4.3 示例
[root@choco-01 ~]# last | cut -d ' ' -f 1 | sort | uniq
reboot
root
wtmp
[root@choco-01 ~]# last | cut -d ' ' -f 1 | sort | uniq -c
1
30 reboot
61 root
1 wtmp
5. tee
双重重定向。之前讲过重定向,不是输出到文件就是输出到屏幕,怎样同时输出到文件和屏幕呢?
—— 双重重定向,tee
5.1 用法
5.2 选项
-
-a
:以追加方式进行重定向(默认是以覆盖方式进行)
5.3 示例
-
默认以覆盖方式进行重定向
[root@choco-01 ~]# ls | tee ls.txt
anaconda-ks.cfg
expect-test
ls.txt
[root@choco-01 ~]# cat ls.txt
anaconda-ks.cfg
expect-test
ls.txt
[root@choco-01 ~]# ls /tmp/ | tee ls.txt
nano-2.3.1-10.el7.x86_64.rpm
systemd-private-5d8a8aa01a9c41998508565cbe753f65-chronyd.service-fbxoiZ
systemd-private-5d8a8aa01a9c41998508565cbe753f65-vgauthd.service-gYD808
systemd-private-5d8a8aa01a9c41998508565cbe753f65-vmtoolsd.service-e8LhLi
yum_save_tx.2018-05-30.09-24.ehBdYd.yumtx
[root@choco-01 ~]# cat ls.txt # 原先的内容不见了
nano-2.3.1-10.el7.x86_64.rpm
systemd-private-5d8a8aa01a9c41998508565cbe753f65-chronyd.service-fbxoiZ
systemd-private-5d8a8aa01a9c41998508565cbe753f65-vgauthd.service-gYD808
systemd-private-5d8a8aa01a9c41998508565cbe753f65-vmtoolsd.service-e8LhLi
yum_save_tx.2018-05-30.09-24.ehBdYd.yumtx
- 以追加方式进行重定向
[root@choco-01 ~]# cat ls.txt
nano-2.3.1-10.el7.x86_64.rpm
systemd-private-5d8a8aa01a9c41998508565cbe753f65-chronyd.service-fbxoiZ
systemd-private-5d8a8aa01a9c41998508565cbe753f65-vgauthd.service-gYD808
systemd-private-5d8a8aa01a9c41998508565cbe753f65-vmtoolsd.service-e8LhLi
yum_save_tx.2018-05-30.09-24.ehBdYd.yumtx
[root@choco-01 ~]# ls | tee -a ls.txt
anaconda-ks.cfg
expect-test
ls.txt
[root@choco-01 ~]# cat ls.txt # 这次原内容没被覆盖
nano-2.3.1-10.el7.x86_64.rpm
systemd-private-5d8a8aa01a9c41998508565cbe753f65-chronyd.service-fbxoiZ
systemd-private-5d8a8aa01a9c41998508565cbe753f65-vgauthd.service-gYD808
systemd-private-5d8a8aa01a9c41998508565cbe753f65-vmtoolsd.service-e8LhLi
yum_save_tx.2018-05-30.09-24.ehBdYd.yumtx
anaconda-ks.cfg
expect-test
ls.txt
6. tr
常用于关键字的删除与替换,但功能基本可以靠 sed 替代
6.1 用法
tr -[ds]
6.2 选项
-
-d
: -s
6.3 示例
- 删除特定字符
[root@choco-01 /]# head -5 /etc/passwd | tr -d ':' #冒号不见了
rootx00root/root/bin/bash
binx11bin/bin/sbin/nologin
daemonx22daemon/sbin/sbin/nologin
admx34adm/var/adm/sbin/nologin
lpx47lp/var/spool/lpd/sbin/nologin
- 替换字符
[root@choco-01 /]# head -5 /etc/passwd | tr '[a-z]' '[A-Z]'
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
7. split
文件太大,想要切割开来?
—— 用 split
7.1 用法
split -[lb]
7.2 选项
-
-b #k
:以容量进行切割,后接容量,可带单位如:b、k、m等 -
-l #
:以行数进行切割,后接行数
7.3 示例
- 按行数切割文件
[root@choco-01 ~]# cat split.test
1
2
3
4
5
6
7
8
9
10
[root@choco-01 ~]# split -l 2 split.test SPLIT
[root@choco-01 ~]# ls SP*
SPLITaa SPLITab SPLITac SPLITad SPLITae
[root@choco-01 ~]# cat SPLITaa
1
2
- 按容量切割文件
[root@choco-01 ~]# ll -h split.text
-rw-r--r-- 1 root root 10M Jun 4 10:45 split.text
[root@choco-01 ~]# split -b 3M split.text SP #以3M为单位进行切割
[root@choco-01 ~]# ll -h SP* #从头切到尾,发现剩了1M,单独成为文件
-rw-r--r-- 1 root root 3.0M Jun 4 10:48 SPaa
-rw-r--r-- 1 root root 3.0M Jun 4 10:48 SPab
-rw-r--r-- 1 root root 3.0M Jun 4 10:48 SPac
-rw-r--r-- 1 root root 1.0M Jun 4 10:48 SPad
扩展知识
关于PROMPT_COMMAND环境变量的含义
source exec 区别
Linux特殊符号大全
sort并未按ASCII排序