【2018.04.24学习笔记】【linux基础知识8.10-8.13】

8.10 shell特殊符号cut命令

shell中的特殊符号:

1、* 代表任意n个字符,包括0个

2、? 代表任意单个字符

3、# 注释字符,#号后面的字符不生效,仅注释用

[root@lgs-01 ~]# #ls
[root@lgs-01 ~]# ls
2  abc  anaconda-ks.cfg  passwdtest  rpmtest  tartest

4、\ 脱义字符,要显示特殊符号本身,可以用脱义字符,例如: $

[root@lgs-01 ~]# y=$6
[root@lgs-01 ~]# echo $y

[root@lgs-01 ~]# y=\$6
[root@lgs-01 ~]# echo $y
$6

5、| 管道字符。

与管道字符有关的cut命令:分割截取字符串

-d 选项:指定分隔符,通常配合其他选项 如 -f 一起用

-f 选项:指定段号 显示每行的所有指定段:

[root@lgs-01 ~]# cat passwdtest|head -2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@lgs-01 ~]# cat passwdtest|head -2|cut -f1 -d ":"
root
bin
[root@lgs-01 ~]# cat passwdtest|head -2|cut -f2,5 -d ":"
x:root
x:bin
[root@lgs-01 ~]# cat passwdtest|head -2|cut -f2-5 -d ":"
x:0:0:root
x:1:1:bin

-c选项:指定第几个字符

[root@lgs-01 ~]# cat passwdtest|head -2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@lgs-01 ~]# cat passwdtest|head -2|cut -c 4
t
:

8.11 sort_wc_uniq命令

排序命令:sort ,按列排序,默认按字符的ACSII码排序

[root@lgs-01 ~]# cat passwdtest
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
lgs:x:1008:1000::/home/lgs:/bin/bash
abc:x:1001:1000::/home/abc:/bin/bash

[root@lgs-01 ~]# sort passwdtest 
abc:x:1001:1000::/home/abc:/bin/bash
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
lgs:x:1008:1000::/home/lgs:/bin/bash
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

-n选项:以数字的值排序,数字以外的认为是0

[root@lgs-01 ~]# sort -n passwdtest 
abc:x:1001:1000::/home/abc:/bin/bash
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
lgs:x:1008:1000::/home/lgs:/bin/bash
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
1
2
9
12
51
59
587

-r选项:反向排序,从大到小

[root@lgs-01 ~]# sort -r passwdtest 
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
root:x:0:0:root:/root:/bin/bash
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
lgs:x:1008:1000::/home/lgs:/bin/bash
halt:x:7:0:halt:/sbin:/sbin/halt
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
abc:x:1001:1000::/home/abc:/bin/bash
9
59
587
51
2
12
1

-t选项:分隔符 -kn1 (少用)

统计行数:wc -l 空行也算

[root@lgs-01 ~]# cat 1.txt 
abc 111
1123
22 3

3

3
[root@lgs-01 ~]# wc -l 1.txt 
7 1.txt

统计字符数:wc -m ,每一行后面的隐藏换行符$也计算在内,空格也算

[root@lgs-01 ~]# cat -A 1.txt 
abc 111$
1123$
22 3$
$
3$
$
3$
[root@lgs-01 ~]# wc -m 1.txt 
24 1.txt

统计词数:wc -w ,以空格区分统计

[root@lgs-01 ~]# cat 1.txt 
abc 111
1123
22 3

3

3
[root@lgs-01 ~]# wc -w 1.txt 
7 1.txt

去重复:uniq。 要连续行重复,才会去重复。

只去重了重复的连续行aaaa

[root@lgs-01 ~]# cat 1.txt 
abc:111
1123
22 3

3

3
1123

aaaa
aaaa

bb
123
bb
[root@lgs-01 ~]# uniq 1.txt 
abc:111
1123
22 3

3

3
1123

aaaa

bb
123
bb

或者先排序后去重复才有效,重复空行也能去重。

[root@lgs-01 ~]# cat 1.txt 
abc:111
1123
22 3

3

3
1123

aaaa
aaaa

bb
123
bb
[root@lgs-01 ~]# sort 1.txt |uniq

1123
123
22 3
3
aaaa
abc:111
bb

-c选项:统计重复的次数

[root@lgs-01 ~]# cat 1.txt 
abc:111
1123
22 3

3

3
1123

aaaa
aaaa

bb
123
bb
[root@lgs-01 ~]# sort 1.txt |uniq -c
      4 
      2 1123
      1 123
      1 22 3
      2 3
      2 aaaa
      1 abc:111
      2 bb

8.12 tee_tr_split命令

tee命令:重定向并显示,手动输入重定向内容

[root@lgs-01 ~]# cat 2.txt 
[root@lgs-01 ~]# tee 2.txt 
111
111
abc    
abc
^C
[root@lgs-01 ~]# cat 2.txt 
111
abc

tee -a 选项:追加并显示,手动输入追加内容

[root@lgs-01 ~]# cat 2.txt 
111
abc
[root@lgs-01 ~]# tee -a 2.txt 
lgs
lgs
xyz    
xyz
^C
[root@lgs-01 ~]# cat 2.txt 
111
abc
lgs
xyz

用管道符,可以自动输入tee的追加内容:

[root@lgs-01 ~]# cat 1.txt 
abc:111
1123
22 3

3

3
1123

aaaa
aaaa

bb
123
bb
[root@lgs-01 ~]# sort 1.txt |uniq -c|tee 3.txt 
      4 
      2 1123
      1 123
      1 22 3
      2 3
      2 aaaa
      1 abc:111
      2 bb
[root@lgs-01 ~]# cat 3.txt 
      4 
      2 1123
      1 123
      1 22 3
      2 3
      2 aaaa
      1 abc:111
      2 bb

tr命令:替换字符,[]内重复字符的,最后一位匹配的才生效替换。

[root@lgs-01 ~]# cat 2.txt 
111
abc
lgs
xyz
[root@lgs-01 ~]# cat 2.txt |tr '[111]' '[999]'
999
abc
lgs
xyz

[root@lgs-01 ~]# cat 2.txt
111
abc
lgs
xyz
126
[root@lgs-01 ~]# cat 2.txt |tr '[111]' '[456]'
666
abc
lgs
xyz
626

小写字母替换为大写字母:

[root@lgs-01 ~]# cat 2.txt
111
abc
lgs
xyz
126
[root@lgs-01 ~]# cat 2.txt |tr '[a-z]' '[A-Z]'
111
ABC
LGS
XYZ
126

split命令:切割,大文件切成小文件 ,切成指定大小的几份

[root@lgs-01 ~]# du -sh abc
3.0M	abc
[root@lgs-01 ~]# split -b 1M abc 
[root@lgs-01 ~]# ls
1.txt  2  2.txt  345  abc  anaconda-ks.cfg  passwdtest  rpmtest  tartest  xaa  xab  xac
[root@lgs-01 ~]# du -sh xaa
1.0M	xaa
[root@lgs-01 ~]# du -sh xab
1.0M	xab
[root@lgs-01 ~]# du -sh xac
956K	xac

-l 选项:指定行切割。

[root@lgs-01 6]# wc -l passwdtest 
31 passwdtest
[root@lgs-01 6]# split -l 10 passwdtest 
[root@lgs-01 6]# ls
passwdtest  xaa  xab  xac  xad
[root@lgs-01 6]# wc -l xaa
10 xaa
[root@lgs-01 6]# wc -l xad
1 xad
[root@lgs-01 6]# cat xaa
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
[root@lgs-01 6]# cat xad
abc:y

指定分割后的文件名前缀:

[root@lgs-01 6]# split 
[root@lgs-01 6]# ls
abc  passwdtest
[root@lgs-01 6]# split -b 100K abc kkk.
[root@lgs-01 6]# ls
abc     kkk.ab  kkk.ad  kkk.af  kkk.ah  kkk.aj  kkk.al  kkk.an  kkk.ap  kkk.ar  kkk.at  kkk.av  kkk.ax  kkk.az  kkk.bb  kkk.bd  passwdtest
kkk.aa  kkk.ac  kkk.ae  kkk.ag  kkk.ai  kkk.ak  kkk.am  kkk.ao  kkk.aq  kkk.as  kkk.au  kkk.aw  kkk.ay  kkk.ba  kkk.bc  kkk.be

8.13 shell特殊符号下

$ : 变量的前缀,例如 $PATH、$HOME等;$在则正表达式里表示行尾的意思

[root@lgs-01 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@lgs-01 ~]# echo $x
10

与! 结合使用:!$ 代表上一条命令的最后一个参数

[root@lgs-01 ~]# echo $x
10
[root@lgs-01 ~]# echo !$
echo $x
10

多条命令写在一行,用 ; 号隔开

[root@lgs-01 ~]# ls ; ls -l abc
1.txt  2  2.txt  345  3.txt  6  abc  anaconda-ks.cfg  passwdtest  rpmtest  tartest  xaa  xab  xac
-rwxr-xr-x. 1 root root 3073568 4月  16 18:00 abc

~ 表示用户的家目录:正则表达式里代表 匹配符

[root@lgs-01 ~]# ls -d ~
/root

& 号放在命令后面,代表把命令放到后台运行

[root@lgs-01 ~]# sleep 100 &
[1] 1586
[root@lgs-01 ~]# jobs
[1]+  运行中               sleep 100 &

[ ] 中括号 指定里面字符中的某单个字符:[0-9]、[a-zA-Z]、[abcdefg]

|| 、&& 用于命令之间:在shell中 || 代表或者、&&代表并且

命令a || 命令b 代表 0 : 1或者 1 : 0,意思是命令a执行不成功,才执行命令b;如果命令a执行成功,就不执行命令b。

命令a && 命令b 代表 1 : 1 或者 0 : 0,意思是命令a执行成功,才执行命令b;如果命令a执行不成功,就不执行命令b。

shell脚本中的小案例:[-d abc] || mkdir abc,判断abc是否是目录,如果不是,创建abc目录。

猜你喜欢

转载自my.oschina.net/u/3804114/blog/1800605