和管道符有关的命令

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 总用量