和管道符有关的命令
cut命令
用来截取某一个字段
语法:cut -d ‘分隔字符’ [-cf] n(这里的n是数字)
- -d:后面跟分隔字符,分隔字符要用单引号括起来
- -c:后面接的是第几个字符
- -f:后面接的是第几个字段(区块)
[root@centos-01 ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1,2
root:x
bin:x
[root@centos-01 ~]# cat /etc/passwd |head -2 |cut -c 1-4
root
bin:
sort命令
sort用做排序。如果sort不加任何选项,则从首字符向后,依次按ASCII码值进行比较,最后按升序输出。
语法:sort [-t 分隔符] [-kn1,n2] [-nru](这里的n1 < n2)
- -t 分隔符:作用跟cut的-d一个意思
- -n:使用纯数字排序
- -r:反向排序
- -u:去重复
- -kn1,n2:由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序
[root@centos-01 ~]# sort /etc/passwd
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
games:x:12:100:games:/usr/games:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
[root@centos-01 ~]# head /etc/passwd > 1.txt
[root@centos-01 ~]# sort 1.txt
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
halt:x:7:0:halt:/sbin:/sbin/halt
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
[root@centos-01 ~]# sort -r 1.txt
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
wc命令
用于统计文档的行数、字符数、词数,常用的选项为:
- -l:统计行数
- -m:统计字符数
- -w:统计词数
- wc不跟任何选项,直接跟文档,则会把行数、词数、字符数依次输出。
[root@centos-01 ~]# wc -l 1.txt
10 1.txt
[root@centos-01 ~]# wc -m 1.txt
385 1.txt
[root@centos-01 ~]# ls
1.txt anaconda-ks.cfg
[root@centos-01 ~]# vim 2.txt
[root@centos-01 ~]# wc -m 2.txt
10 2.txt
[root@centos-01 ~]# cat -A 2.txt
abcd$
,;.?$
每行末尾的隐藏字符$
也算在字符统计中。
[root@centos-01 ~]# wc -w 2.txt
2 2.txt
uniq命令
去重复的行,使用uniq的前提是需要先给文件排序,否则不是相邻的两行无法去重。
- -c:统计重复的行数,并把行数写在前面。
[root@centos-01 ~]# vim 2.txt
[root@centos-01 ~]# cat 2.txt
abcd
,;.?
abcd
abcd
[root@centos-01 ~]# uniq 2.txt
abcd
,;.?
abcd
[root@centos-01 ~]# sort 2.txt
,;.?
abcd
abcd
abcd
[root@centos-01 ~]# sort 2.txt |uniq
,;.?
abcd
[root@centos-01 ~]# sort 2.txt |uniq -c
1 ,;.?
3 abcd
tee命令
后跟文件名,类似于重定向“>”,但是比重定向多了一个功能,在把文件写入后面所跟的文件中的同时,还显示在屏幕上。
-a
:追加重定向,类似于“>>”。不加“-a”选项,是覆盖重定向,类似于“>”。
[root@centos-01 ~]# ls
1.txt 2.txt anaconda-ks.cfg
[root@centos-01 ~]# sort 2.txt |uniq -c
1 ,;.?
3 abcd
[root@centos-01 ~]# sort 2.txt |uniq -c > a.txt
[root@centos-01 ~]# cat a.txt
1 ,;.?
3 abcd
[root@centos-01 ~]# sort 2.txt |uniq -c |tee a.txt
1 ,;.?
3 abcd
[root@centos-01 ~]# cat a.txt
1 ,;.?
3 abcd
[root@centos-01 ~]# sort 2.txt |uniq -c |tee -a a.txt
1 ,;.?
3 abcd
[root@centos-01 ~]# cat a.txt
1 ,;.?
3 abcd
1 ,;.?
3 abcd
tr命令
替换字符,常用来处理文档中出现的特殊符号,如DOS文档中出现的^M符号。常用的选项有两个:
- -d:删除某个字符,-d后面跟要删除的字符
- -s:把重复的字符去掉
最常用的就是把小写变大写:tr '[a-z]' '[A-Z]'
[root@centos-01 ~]# echo "centos" |tr '[cos]' '[COS]'
CentOS
[root@centos-01 ~]# echo "sdut" |tr '[a-z]' '[A-Z]'
SDUT
替换、删除、去重复都是针对一个字符来讲的,有一定局限性。
split命令
切割文档,常用选项:
- -b:依据大小来分割文档,单位为byte
- -l:依据行数来分割文档
[root@centos-01 ~]# cat a.txt
1 ,;.?
3 abcd
1 ,;.?
3 abcd
[root@centos-01 ~]#
[root@centos-01 ~]#
[root@centos-01 ~]# find /etc/ -type f -name "*conf" -exec cat {} >> a.txt \;
[root@centos-01 ~]# du -sh a.txt
240K a.txt
[root@centos-01 ~]# mkdir test
[root@centos-01 ~]# mv a.txt test/
[root@centos-01 ~]# cd test/
[root@centos-01 test]# ls
a. txt
[root@centos-01 test]# split -b 10000 a.txt
[root@centos-01 test]# ls
a.txt xab xad xaf xah xaj xal xan xap xar xat xav xax
xaa xac xae xag xai xak xam xao xaq xas xau xaw xay
[root@centos-01 test]# du -sb *
243445 a.txt
10000 xaa
10000 xab
10000 xac
10000 xad
10000 xae
10000 xaf
10000 xag
10000 xah
10000 xai
10000 xaj
10000 xak
10000 xal
10000 xam
10000 xan
10000 xao
10000 xap
10000 xaq
10000 xar
10000 xas
10000 xat
10000 xau
10000 xav
10000 xaw
10000 xax
3445 xay
如果split不指定目标文件名,则会以xaa xab…这样的文件名来存取切割后的文件。
[root@centos-01 test]# rm -f x*
[root@centos-01 test]# ls
a.txt
[root@centos-01 test]# split -b 100k a.txt
[root@centos-01 test]# ls
a.txt xaa xab xac
[root@centos-01 test]# du -sh *
240K a.txt
100K xaa
100K xab
40K xac
[root@centos-01 test]# rm -f x*
[root@centos-01 test]# split -b 100k a.txt tmp.
[root@centos-01 test]# ls
a.txt tmp.aa tmp.ab tmp.ac
[root@centos-01 test]# rm -f tmp*
[root@centos-01 test]# split -l 2000 a.txt
[root@centos-01 test]# ls
a.txt xaa xab xac xad
[root@centos-01 test]# wc -l *
6085 a.txt
2000 xaa
2000 xab
2000 xac
85 xad
12170 总用量