7.2 8.10-8.13

8.10 shell特殊符_cut命令

特殊符号

* 任意个任意字符

?任意一个字符

# 注释字符,加在一段命令的开头或shell脚本某一行的开头则该命令不生效或该行shell脚本不被执行

\ 脱义特殊符号

[root@hyc-01-01 ~]# a=45

[root@hyc-01-01 ~]# b=34

[root@hyc-01-01 ~]# c=$a$b

[root@hyc-01-01 ~]# echo $c

4534

[root@hyc-01-01 ~]# c=\$a\$b

[root@hyc-01-01 ~]# echo $c

$a$b \会将后面的特殊符号脱义

| 管道符

管道相关命令

 

cut 截取一行的内容

[root@hyc-01-01 ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1

root

bin

[root@hyc-01-01 ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1,2

root:x

bin:x

[root@hyc-01-01 ~]# cat /etc/passwd |head -2|cut -d ":" -f 1-3

root:x:0

bin:x:1

[root@hyc-01-01 ~]# cat /etc/passwd |head -2|cut -c 4

t

:

-c:指定截取每一行的第几个字符

-d:指定每段间的分割符号

-f:指定分割几段

 

8.11 sort_wc_uniq命令

sort 排序(常与uniq结合使用)

[root@hyc-01-01 ~]# sort /etc/passwd 默认sort会按ASCII码中的id号由小到大排序

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

[root@hyc-01-01 ~]# sort 1.txt

22223

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

*dfhopo

{erojg[e'i

halt:x:7:0:halt:/sbin:/sbin/halt

^jrj[tgj

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

当被比较的两行前一个字符id一样时,会进而比较后面的字符

[root@hyc-01-01 ~]# sort -n 1.txt 此时按数字由小到大排序,所有字母及特殊符号会被当做0

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

*dfhopo

{erojg[e'i

halt:x:7:0:halt:/sbin:/sbin/halt

^jrj[tgj

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

1

2

3

4

6

8

9

22223

[root@hyc-01-01 ~]# sort -r 1.txt –n的反序排序

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

^jrj[tgj

halt:x:7:0:halt:/sbin:/sbin/halt

{erojg[e'i

*dfhopo

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

9

8

6

4

3

22223

2

1

[root@hyc-01-01 ~]# sort -nk 3 -t : 1.txt 1.txt以:分段,并按第3段以数字由小到大排序

1

2

22223

3

4

6

8

9

*dfhopo

{erojg[e'i

^jrj[tgj

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

-n:以数字由小到大排序,字母被认为是0

-r:按-n排序的倒序排序

-k:指定第几段,常与-t一起使用

-t:指定分段的分割符

 

wc命令

[root@hyc-01-01 ~]# wc -l 1.txt

21 1.txt 统计文件行数

[root@hyc-01-01 ~]# wc -m 1.txt

433 1.txt 统计文件字符数,统计时会连带隐藏字符一起统计

[root@hyc-01-01 ~]# cat -A 1.txt 文件的每一行都有隐藏字符

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@hyc-01-01 ~]# cat 1.txt

111 aaa 333 sbb

1,456 2@33

[root@hyc-01-01 ~]# wc -w 1.txt

6 1.txt 统计词数(连在一起的字符,无论数字符号或字母都会被认为是一个词;用空格分格的属于两个不同的词)

 

uniq 去重复

[root@hyc-01-01 ~]# cat 1.txt

111

111

222

222

333

333

444

444

555

666

555

[root@hyc-01-01 ~]# uniq 1.txt 去重复

111

222

333

444

555

666

555

没有排在相邻行的两个555并没有被去重,所以使用uniq前一般需要先用sort排序

[root@hyc-01-01 ~]# sort 1.txt|uniq 排序后所有重复项被去除

111

222

333

444

555

666

666555

[root@hyc-01-01 ~]# sort 1.txt|uniq –c 统计重复次数

      2 111

      2 222

      2 333

      2 444

     56 555

     56 666

     54 666555

8.12 tee_tr_split命令

tee

[root@hyc-01-01 ~]# sort 1.txt|uniq -c|tee a.txt 将前面执行的结果重定向到a.txt并将被重定向的内容打印在屏幕上

      2 111

      2 222

      2 333

      2 444

     56 555

     56 666

     54 666555

[root@hyc-01-01 ~]# sort 1.txt|uniq -c > a.txt

>的作用与tee相同但不会显示输出结果

|tee的作用就是重定向

 

[root@hyc-01-01 ~]# >1.txt 该命令可以清空1.txt中的内容

 

[root@hyc-01-01 ~]# sort 1.txt|uniq -c|tee a.txt

      1 1111

      1 2222

      2 3333

      1 4444

      1 5555

      1 6666

      1 7777

[root@hyc-01-01 ~]# sort 1.txt|uniq -c|tee -a a.txt tee –a表示追加重定向(>>

      1 1111

      1 2222

      2 3333

      1 4444

      1 5555

      1 6666

      1 7777

[root@hyc-01-01 ~]# cat a.txt

      1 1111

      1 2222

      2 3333

      1 4444

      1 5555

      1 6666

      1 7777

      1 1111

      1 2222

      2 3333

      1 4444

      1 5555

      1 6666

      1 7777

tr命令

[root@hyc-01-01 ~]# echo hyc |tr '[hc]' '[HC]' 替换字符(H替换hC替换c

HyC

[root@hyc-01-01 ~]# echo hyc |tr '[hc]' 'H'

HyH hc替换为H

[root@hyc-01-01 ~]# echo hyc |tr 'h' 'H'

Hyc h替换为H

[root@hyc-01-01 ~]# echo hyc |tr '[a-z]' '[A-Z]'

HYC 将所有小写字母变为大写(改变的字母一一对应,a对应A,e对应E

[root@hyc-01-01 ~]# echo hyc |tr '[a-z]' '1'

111 将所有字母替换为1

[root@hyc-01-01 ~]# echo hyc |tr '[a-z]' '[1]'

]]] 错误用法

 

split 切割文件

[root@hyc-01-01 ~]# split -b 10 1.txt

按文件大小切割文件(默认单位字节,可指定K/M等单位);

切割时保留源文件;

[root@hyc-01-01 ~]# split -l 100 1.txt 按行数切割文件

[root@hyc-01-01 ~]# find /etc -type f -name "*conf" -exec cat {}>>a.txt \;

[root@hyc-01-01 ~]# du -sh a.txt

128K         a.txt

[root@hyc-01-01 ~]# find /etc -type f -name "*conf" -exec cat {}>>a.txt \;

[root@hyc-01-01 ~]# du -sh a.txt

256K         a.txt

[root@hyc-01-01 test]# split -b 1000 a.txt

[root@hyc-01-01 test]# du -sb *

237934    a.txt

1000         xaa

1000         xab

1000         xac

1000         xad

1000         xae

1000         xaf

1000         xag

1000         xah

1000         xiz

1000         xja

1000         xjb

1000         xjc

934  xjd

默认被切割文件的名称:

x开头;

x后跟的第二位为字母a,第二位字母a后跟的字母从az依次出现;

第三位a-z依次出现后将第二位换成b再轮一次a-z,然后换成c,如此反复;

xz开始会增加位数变为5位,再从最后一位轮a-z,轮完后改变前一位再重新轮,如此反复;

xaa …xyz…xzaaa…xzaba…xzbaa…

[root@hyc-01-01 test]# split -b 100 a.txt hyc. 分割时指定被分割文件的前缀

[root@hyc-01-01 test]# ls

a.txt   hyc.ll  hyc.wx    hyc.zajj  hyc.zauv  hyc.zbgh  hyc.zbrt  hyc.zcdf

hyc.aa  hyc.lm  hyc.wy    hyc.zajk  hyc.zauw  hyc.zbgi  hyc.zbru  hyc.zcdg

hyc.ab  hyc.ln  hyc.wz    hyc.zajl  hyc.zaux  hyc.zbgj  hyc.zbrv  hyc.zcdh

8.13 shell特殊符号(下)

$ 变量前缀

[root@hyc-01-01 ~]# a=1

[root@hyc-01-01 ~]# echo $a

1

!$ 表示行尾

[root@hyc-01-01 ~]# ls /etc/passwd

/etc/passwd

[root@hyc-01-01 ~]# cat !$

cat /etc/passwd

; 多条命令间用分号分割

[root@hyc-01-01 ~]# for i in `seq 1 10`;do echo $i;done 多条命令写在一行

1

2

3

4

5

6

7

8

9

10

~ 用户家目录;正则表达式中表示匹配符

 

& 写在命令末尾,会将命令丢到后台执行

 

> 正确内容重定向,会覆盖文件原来内容

>> 正确内容追加重定向

2> 错误信息重定向

2>> 错误信息追加重定向

&> 同时将正确、错误信息重定向到一个文件

 

[] 指定字符中的一个

[0-9]/[a-zA-Z]/[abc]

|| 或者

[root@hyc-01-01 ~]# ls 1.txt || wc -l 1.txt

1.txt 执行第一条或者第二条命令

[root@hyc-01-01 ~]# ls 1a.txt || wc -l 1.txt

ls: 无法访问1a.txt: 没有那个文件或目录

1 1.txt 当第一条命令执行成功就不再往下执行

 

&& 只有前一条命令执行成功才会执行后面的命令

[root@hyc-01-01 ~]# ls 1.txt && cat 1.txt

1.txt

cat: 4.txt: 没有那个文件或目录

[root@hyc-01-01 ~]# ls a.txt && cat 1.txt cat 1.txt未被执行

ls: 无法访问a.txt: 没有那个文件或目录

判断一个目录是否存在,决定是否创建目录

[root@hyc-01-01 ~]# ls

1.txt  anaconda-ks.cfg  CentOS7-Base-163.repo  test hyclinux目录不存在

[root@hyc-01-01 ~]# [ -d hyclinux ] || mkdir hyclinux 判断hyclinux不存在,然后创建

[root@hyc-01-01 ~]# ls

1.txt  anaconda-ks.cfg  CentOS7-Base-163.repo  hyclinux  test

[root@hyc-01-01 ~]# [ -d hyclinux ] && mkdir hyclinux 前一条成功才执行后一条

mkdir: 无法创建目录"hyclinux": 文件已存在


猜你喜欢

转载自blog.51cto.com/12216458/2135285
7.2