cut, grep, sort, wc, uniq, tee, tr, col, join, paste, expand, split, xargs
一, cut
属性: 撷取命令
说明: 这个指令可以将一段讯息的某一段给他 "切" 出来~ 处理的讯息是以 "行" 为单位
选项与参数:
-d : 后面接分隔字符. 与 -f 一起使用;
-f : 依据 -d 的分隔字符将一段讯息分区成为数段, 用 -f 取出第几段的意思;
-c : 以字符 (characters) 的单位取出固定字符区间;
--complement: 补足被选择的字节, 字符或字段;
实例 1
将 PATH 变量取出第五个路径
- [[email protected] ~]# echo ${
- PATH
- }
- /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
- [[email protected] ~]# echo ${
- PATH
- } | cut -d ':' -f 5
- /root/bin
- [[email protected] ~]#
实例 2
按指定范围输出
- [[email protected] ~]# ll
- total 0
- -rw-r--r-- 1 root root 0 Jan 15 14:11 123456789
取得第五个字符以后的所有字符
- [[email protected] ~]# ls | cut -c 5-
- 56789
取得第五到八个字符
- [[email protected] ~]# ls | cut -c 5-8
- 5678
- [[email protected] ~]#
实例 3
用指定分隔符截取指定位置字符
- [[email protected] ~]# echo "1 2 3 4 5">test01.txt
- [[email protected] ~]# cat test01.txt
- 1 2 3 4 5
- [[email protected] ~]# cut -d ' ' -f 1 test01.txt
- 1
- [[email protected] ~]# cut -d ' ' -f2,4 test01.txt
- 2 4
- [[email protected] ~]# cut -d ' ' -f1,4 test01.txt
- 1 4
- [[email protected] ~]# cut -d ' ' -f1-4 test01.txt
- 1 2 3 4
- [[email protected] ~]# cut -d ' ' -f2-4 test01.txt
- 2 3 4
- [[email protected] ~]#
实例 4
截取指定字段之外的列, 也就是取反
- [[email protected] ~]# cat test01.txt
- 1 2 3 4 5
- [[email protected] ~]# cut -d ' ' -f2-4 test01.txt --complement
- 1 5
- [[email protected] ~]#
- [[email protected] ~]# cut -d ' ' -f2,4 test01.txt --complement
- 1 3 5
- [[email protected] ~]#
二, grep
属性: 撷取命令
说明: grep 是分析一行讯息, 若当中有我们所需要的信息, 就将该行拿出来
选项与参数:
-a : 将 binary 文件以 text 文件的方式搜寻数据
-c : 计算找到 '搜寻字串' 的次数
-i : 忽略大小写的不同, 所以大小写视为相同
-n : 顺便输出行号
-v : 反向选择, 亦即显示出没有 '搜寻字串' 内容的那一行!
--color=auto : 可以将找到的关键字部分加上颜色的显示喔!
实例 1
查看 root 的行信息以及行数
- [[email protected] ~]# grep 'root' -n /etc/passwd
- 1:root:x:0:0:root:/root:/bin/bash
- 10:operator:x:11:0:operator:/root:/sbin/nologin
- [[email protected] ~]#
三, sort
属性: 排序命令
说明: sort 可以帮助我们进行排序
-f : 忽略大小写的差异, 例如 A 与 a 视为编码相同;
-b : 忽略最前面的空白字符部分;
-M : 以月份的名字来排序, 例如 JAN, DEC 等等的排序方法;
-n : 使用 "纯数字" 进行排序 (默认是以文字体态来排序的);
-r : 反向排序;
-u : 就是 uniq , 相同的数据中, 仅出现一行代表;
-t : 分隔符号, 默认是用 [tab] 键来分隔;
-k : 以那个区间 (field) 来进行排序的意思
实例 1
账户排序 (默认使用首字符排序, 首字符相同, 以第二位字符进行排序)
- [[email protected] ~]# cat /etc/passwd |sort
- adm:x:3:4:adm:/var/adm:/sbin/nologin
- bin:x:1:1:bin:/bin:/sbin/nologin
- chrony:x:998:996::/var/lib/chrony:/sbin/nologin
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
- dbus:x:81:81:System message bus:/:/sbin/nologin
- ftp:x:14:50:FTP User:/var/ftp:/sbin/nolog
- ....
实例 2
/etc/passwd 内容是以 : 来分隔的, 以第三栏来排序
- [[email protected] ~]# cat /etc/passwd |sort -t ';' -k 3
- adm:x:3:4:adm:/var/adm:/sbin/nologin
- bin:x:1:1:bin:/bin:/sbin/nologin
- chrony:x:998:996::/var/lib/chrony:/sbin/nologin
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
- dbus:x:81:81:System message bus:/:/sbin/nologin
- ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
四, wc
属性: 排序命令
说明: 统计
选项与参数:
-l : 仅列出行;
-w : 仅列出多少字 (英文单字);
-m : 多少字符;
实例 1
- [[email protected] ~]# echo "1 2 3 4 5">test01.txt
- [[email protected] ~]# cat test01.txt |wc -l
- 1
- [[email protected] ~]# cat test01.txt |wc -m
- 10
- [[email protected] ~]# cat test01.txt |wc -w
- 5
实例 2
统计字符串长度
- [[email protected] ~]# cat test01.txt
- 12345
- [[email protected] ~]# cat test01.txt |wc -L
- 5
- [[email protected] ~]#
五, uniq
属性: 排序命令
说明: 去重复
实例 1
去重复 (uniq)
选项与参数:
-i : 忽略大小写字符的不同;
-c : 进行计数
- [[email protected] ~]# cat test01.txt
- 1
- 1
- 2
- 2
- 3
- 3
- 4
- 5
- 10
- [[email protected] ~]# cat test01.txt |sort -nr|uniq -c
- 1 10
- 1 5
- 1 4
- 2 3
- 2 2
- 2 1
- [[email protected] ~]#
六, tee
属性: 双向重导向
说明: 去重复
选项与参数:
-a : 以累加 (append) 的方式, 将数据加入 file 当中!
- [[email protected] ~]# last | tee last.list
- root pts/0 192.168.247.1 Wed Jan 15 14:40 still logged in
- root pts/0 192.168.247.1 Wed Jan 15 14:17 - 14:40 (00:23)
- reboot system boot 3.10.0-957.el7.x Wed Jan 15 14:16 - 15:23 (01:06)
- wtmp begins Wed Jan 15 14:16:25 2020
- [[email protected] ~]# cat last.list
- root pts/0 192.168.247.1 Wed Jan 15 14:40 still logged in
- root pts/0 192.168.247.1 Wed Jan 15 14:17 - 14:40 (00:23)
- reboot system boot 3.10.0-957.el7.x Wed Jan 15 14:16 - 15:23 (01:06)
七, tr
属性: 字符转换命令
说明: 删除与替换
选项与参数:
-d : 删除讯息当中的 SET1 这个字串;
-s : 取代掉重复的字符!
实例 1
删除指定字符 (不会删除源文件)
- [[email protected] ~]# cat test01.txt
- 1 2 3 4 5
- [[email protected] ~]# cat test01.txt |tr -d 5
- 1 2 3 4
- [[email protected] ~]#
- [[email protected] ~]# cat test01.txt |tr -d '[2-4]'
- 1 5
- [[email protected] ~]#
实例 2
大小写替换
- [[email protected] ~]# echo "a b c D E f">test02.txt
- [[email protected] ~]# cat test02.txt
- a b c D E f
- [[email protected] ~]# cat test02.txt |tr 'a-z' 'A-Z'
- A B C D E F
- [[email protected] ~]# cat test02.txt |tr 'A-Z' 'a-z'
- a b c d e f
- [[email protected] ~]#
实例 3
字符串去重复
- [[email protected] ~]# echo "aa a bbb c D d E">test01.txt
- [[email protected] ~]# cat test01.txt
- aa a bbb c D d E
- [[email protected] ~]# cat test01.txt | tr -s '[a-zA-Z]'
- a a b c D d E
- [[email protected] ~]#
实例 4
权限替换为数字
- [[email protected] ~]# ls test01.txt
- test01.txt
- [[email protected] ~]# ll test01.txt|cut -c 1-10 |tr r 4|tr w 2|tr - 0|awk '{print $1}'
- 0420400400
- [[email protected] ~]# ll test01.txt|cut -c 1-10 |tr r 4|tr w 2|tr - 0|tee t2.txt
- 0420400400
- [[email protected] ~]#
八, col
(略)
九, join
属性: 文件合并
说明: 加入 / 参加
选项与参数:
-t :join 默认以空白字符分隔数据, 并且比对 "第一个字段" 的数据, 如果两个文件相同, 则将两笔数据联成一行, 且第一个字段放在第一个!
-i : 忽略大小写的差异;
-1 : 这个是数字的 1 , 代表 "第一个文件要用那个字段来分析" 的意思;
-2 : 代表 "第二个文件要用那个字段来分析" 的意思.
(略)
十, paste
属性: 内容对比
说明: 对比显示文件内容
选项与参数:
-d : 后面可以接分隔字符. 默认是以 [tab] 来分隔的!
- : 如果 file 部分写成 - , 表示来自 standard input 的数据的意思.
实例 1
- [[email protected] ~]# paste 1.txt 2.txt
- 1 2 3 4 5 1 2 3 4 5
- a b c d e a b c d e f g
- [[email protected] ~]#
十一, expand
(略)
十二, split
说明: 依据文件大小或行数来分区, 就可以将大文件分区成为小文件
选项与参数:
-b : 后面可接欲分区成的文件大小, 可加单位, 例如 b, k, m 等;
-l : 以行数来进行分区.
PREFIX : 代表前置字符的意思, 可作为分区文件的前导文字.
实例 1
将 100M 的文件分成 50M 的文件
- [[email protected] ~]# dd if=/dev/zero of=testfile bs=1M count=100
- 100+0 records in
- 100+0 records out
- 104857600 bytes (105 MB) copied, 0.879992 s, 119 MB/s
- [[email protected] ~]# ll -lh
- total 100M
- -rw-r--r-- 1 root root 100M Jan 15 16:58 testfile
- [[email protected]test ~]# split -b 50M testfile
- [[email protected] ~]# ls
- testfile xaa xab
- [[email protected] ~]# ll -lh
- total 200M
- -rw-r--r-- 1 root root 100M Jan 15 16:58 testfile
- -rw-r--r-- 1 root root 50M Jan 15 16:59 xaa
- -rw-r--r-- 1 root root 50M Jan 15 16:59 xab
- [[email protected] ~]#
实例 2
将划分好的两份小文件合并成原始文件, 命名为 testfile02
- [[email protected] ~]# cat xa*>testfile02
- [[email protected] ~]# ll -lh
- total 300M
- -rw-r--r-- 1 root root 100M Jan 15 16:58 testfile
- -rw-r--r-- 1 root root 100M Jan 15 17:01 testfile02
- -rw-r--r-- 1 root root 50M Jan 15 16:59 xaa
- -rw-r--r-- 1 root root 50M Jan 15 16:59 xab
- [[email protected] ~]#
实例 3
使用 ls -al / 输出的信息中, 每十行记录成一个文件
- [[email protected] local]# pwd
- /usr/local
- [[email protected] local]# ls -al
- total 0
- drwxr-xr-x. 12 root root 131 Nov 26 21:41 .
- drwxr-xr-x. 13 root root 155 Nov 26 21:41 ..
- drwxr-xr-x. 2 root root 6 Apr 11 2018 bin
- drwxr-xr-x. 2 root root 6 Apr 11 2018 etc
- drwxr-xr-x. 2 root root 6 Apr 11 2018 games
- drwxr-xr-x. 2 root root 6 Apr 11 2018 include
- drwxr-xr-x. 2 root root 6 Apr 11 2018 lib
- drwxr-xr-x. 2 root root 6 Apr 11 2018 lib64
- drwxr-xr-x. 2 root root 6 Apr 11 2018 libexec
- drwxr-xr-x. 2 root root 6 Apr 11 2018 sbin
- drwxr-xr-x. 5 root root 49 Nov 26 21:41 share
- drwxr-xr-x. 2 root root 6 Apr 11 2018 src
- [[email protected] local]# ls -al | split -l 10 - lsroot
- [[email protected] local]# ls
- bin etc games include lib lib64 libexec lsrootaa lsrootab sbin share src
- [[email protected] local]# wc -l lsroot*
- 10 lsrootaa
- 3 lsrootab
- 13 total
- [[email protected] local]#
- [[email protected] local]# cat lsrootaa -n
- 1 total 0
- 2 drwxr-xr-x. 12 root root 131 Nov 26 21:41 .
- 3 drwxr-xr-x. 13 root root 155 Nov 26 21:41 ..
- 4 drwxr-xr-x. 2 root root 6 Apr 11 2018 bin
- 5 drwxr-xr-x. 2 root root 6 Apr 11 2018 etc
- 6 drwxr-xr-x. 2 root root 6 Apr 11 2018 games
- 7 drwxr-xr-x. 2 root root 6 Apr 11 2018 include
- 8 drwxr-xr-x. 2 root root 6 Apr 11 2018 lib
- 9 drwxr-xr-x. 2 root root 6 Apr 11 2018 lib64
- 10 drwxr-xr-x. 2 root root 6 Apr 11 2018 libexec
- [[email protected] local]#
十三, xargs
说明: xargs 可以读入 stdin 的数据, 并且以空白字符或断行字符作为分辨, 将 stdin 的数据分隔成为 arguments , 很多指令其实并不支持管线命令, 因此我们可以通过 xargs 来提供该指令引用 standard input 之用,
选项与参数:
-0 : 如果输入的 stdin 含有特殊字符, 例如 `, \, 空白键等等字符时, 这个 -0 参数 可以将他还原成一般字符. 这个参数可以用于特殊状态喔!
-e : 这个是 EOF (end of file) 的意思. 后面可以接一个字串, 当 xargs 分析到这个字串时, 就会停止继续工作!
-p : 在执行每个指令的 argument 时, 都会询问使用者的意思;
-n : 后面接次数, 每次 command 指令执行时, 要使用几个参数的意思. 当 xargs 后面没有接任何的指令时, 默认是以 echo 来进行输出
实例 1
同时执行 id(root),id(bin),id(daemon)
- [[email protected] ~]# cut -d ':' -f 1 /etc/passwd|head -n 3
- root
- bin
- daemon
- [[email protected] ~]# cut -d ':' -f 1 /etc/passwd|head -n 3|xargs -n 1 id
- # 通过 -n 来处理, 一次给予一个参数, 因此上述的结果就 OK 正常的显示, 否则会报错
- uid=0(root) gid=0(root) groups=0(root)
- uid=1(bin) gid=1(bin) groups=1(bin)
- uid=2(daemon) gid=2(daemon) groups=2(daemon)
- [[email protected] ~]#
实例 2
同上, 但是每次执行 id 时, 都要询问使用者是否动作?
- [[email protected] ~]# cut -d ':' -f 1 /etc/passwd|head -n 3|xargs -p -n 1 id
- id root ?...y
- uid=0(root) gid=0(root) groups=0(root)
- id bin ?...y
- uid=1(bin) gid=1(bin) groups=1(bin)
- id daemon ?...y
- uid=2(daemon) gid=2(daemon) groups=2(daemon)
- [[email protected] ~]#
实例 3
行转列
- [[email protected] ~]# ps -ef | grep pyth|cut -c 5-15
- 6632
- 8204
- [[email protected] ~]# ps -ef | grep pyth|cut -c 5-15|xargs
- 6632 8207
- [[email protected] ~]#
来源: http://www.bubuko.com/infodetail-3381776.html