7.2 8.10-8.13
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7.2 8.10-8.13相关的知识,希望对你有一定的参考价值。
8.10 shell特殊符_cut命令
特殊符号
* 任意个任意字符
?任意一个字符
# 注释字符,加在一段命令的开头或shell脚本某一行的开头则该命令不生效或该行shell脚本不被执行
脱义特殊符号
[[email protected] ~]# a=45
[[email protected] ~]# b=34
[[email protected] ~]# c=$a$b
[[email protected] ~]# echo $c
4534
[[email protected] ~]# c=$a$b
[[email protected] ~]# echo $c
$a$b 会将后面的特殊符号脱义
| 管道符
管道相关命令
cut 截取一行的内容
[[email protected] ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1
root
bin
[[email protected] ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1,2
root:x
bin:x
[[email protected] ~]# cat /etc/passwd |head -2|cut -d ":" -f 1-3
root:x:0
bin:x:1
[[email protected] ~]# cat /etc/passwd |head -2|cut -c 4
t
:
-c:指定截取每一行的第几个字符
-d:指定每段间的分割符号
-f:指定分割几段
8.11 sort_wc_uniq命令
sort 排序(常与uniq结合使用)
[[email protected] ~]# 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
…
[[email protected] ~]# 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一样时,会进而比较后面的字符
[[email protected] ~]# 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
[[email protected] ~]# 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
[[email protected] ~]# 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命令
[[email protected] ~]# wc -l 1.txt
21 1.txt 统计文件行数
[[email protected] ~]# wc -m 1.txt
433 1.txt 统计文件字符数,统计时会连带隐藏字符一起统计
[[email protected] ~]# 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$
…
[[email protected] ~]# cat 1.txt
111 aaa 333 sbb
1,456 [email protected]
[[email protected] ~]# wc -w 1.txt
6 1.txt 统计词数(连在一起的字符,无论数字符号或字母都会被认为是一个词;用空格分格的属于两个不同的词)
uniq 去重复
[[email protected] ~]# cat 1.txt
111
111
222
222
333
333
444
444
555
666
555
…
[[email protected] ~]# uniq 1.txt 去重复
111
222
333
444
555
666
555
…
没有排在相邻行的两个555并没有被去重,所以使用uniq前一般需要先用sort排序
[[email protected] ~]# sort 1.txt|uniq 排序后所有重复项被去除
111
222
333
444
555
666
666555
[[email protected] ~]# 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
[[email protected] ~]# sort 1.txt|uniq -c|tee a.txt 将前面执行的结果重定向到a.txt并将被重定向的内容打印在屏幕上
2 111
2 222
2 333
2 444
56 555
56 666
54 666555
[[email protected] ~]# sort 1.txt|uniq -c > a.txt
>的作用与tee相同但不会显示输出结果
|tee的作用就是重定向
[[email protected] ~]# >1.txt 该命令可以清空1.txt中的内容
[[email protected] ~]# sort 1.txt|uniq -c|tee a.txt
1 1111
1 2222
2 3333
1 4444
1 5555
1 6666
1 7777
[[email protected] ~]# 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
[[email protected] ~]# 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命令
[[email protected] ~]# echo hyc |tr '[hc]' '[HC]' 替换字符(H替换h,C替换c)
HyC
[[email protected] ~]# echo hyc |tr '[hc]' 'H'
HyH 将h或c替换为H
[[email protected] ~]# echo hyc |tr 'h' 'H'
Hyc 将h替换为H
[[email protected] ~]# echo hyc |tr '[a-z]' '[A-Z]'
HYC 将所有小写字母变为大写(改变的字母一一对应,a对应A,e对应E)
[[email protected] ~]# echo hyc |tr '[a-z]' '1'
111 将所有字母替换为1
[[email protected] ~]# echo hyc |tr '[a-z]' '[1]'
]]] 错误用法
split 切割文件
[[email protected] ~]# split -b 10 1.txt
按文件大小切割文件(默认单位字节,可指定K/M等单位);
切割时保留源文件;
[[email protected] ~]# split -l 100 1.txt 按行数切割文件
[[email protected] ~]# find /etc -type f -name "*conf" -exec cat {}>>a.txt ;
[[email protected] ~]# du -sh a.txt
128K a.txt
[[email protected] ~]# find /etc -type f -name "*conf" -exec cat {}>>a.txt ;
[[email protected] ~]# du -sh a.txt
256K a.txt
[[email protected] test]# split -b 1000 a.txt
[[email protected] 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后跟的字母从a到z依次出现;
第三位a-z依次出现后将第二位换成b再轮一次a-z,然后换成c,如此反复;
从xz开始会增加位数变为5位,再从最后一位轮a-z,轮完后改变前一位再重新轮,如此反复;
xaa …xyz…xzaaa…xzaba…xzbaa…
[[email protected] test]# split -b 100 a.txt hyc. 分割时指定被分割文件的前缀
[[email protected] 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特殊符号(下)
$ 变量前缀
[[email protected] ~]# a=1
[[email protected] ~]# echo $a
1
!$ 表示行尾
[[email protected] ~]# ls /etc/passwd
/etc/passwd
[[email protected] ~]# cat !$
cat /etc/passwd
…
; 多条命令间用分号分割
[[email protected] ~]# 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]
|| 或者
[[email protected] ~]# ls 1.txt || wc -l 1.txt
1.txt 执行第一条或者第二条命令
[[email protected] ~]# ls 1a.txt || wc -l 1.txt
ls: 无法访问1a.txt: 没有那个文件或目录
1 1.txt 当第一条命令执行成功就不再往下执行
&& 只有前一条命令执行成功才会执行后面的命令
[[email protected] ~]# ls 1.txt && cat 1.txt
1.txt
cat: 4.txt: 没有那个文件或目录
[[email protected] ~]# ls a.txt && cat 1.txt cat 1.txt未被执行
ls: 无法访问a.txt: 没有那个文件或目录
判断一个目录是否存在,决定是否创建目录
[[email protected] ~]# ls
1.txt anaconda-ks.cfg CentOS7-Base-163.repo test hyclinux目录不存在
[[email protected] ~]# [ -d hyclinux ] || mkdir hyclinux 判断hyclinux不存在,然后创建
[[email protected] ~]# ls
1.txt anaconda-ks.cfg CentOS7-Base-163.repo hyclinux test
[[email protected] ~]# [ -d hyclinux ] && mkdir hyclinux 前一条成功才执行后一条
mkdir: 无法创建目录"hyclinux": 文件已存在
以上是关于7.2 8.10-8.13的主要内容,如果未能解决你的问题,请参考以下文章