10月15日任务
8.10 shell特殊符号 cut命令
* 任意个任意字符 (通配符)
? 任意一个字符
# 注释字符 (配置文件或者命令前面,shell脚本,注释或者不生效)
\ 脱义字符
| 管道符
cut 分割,-d 分隔符 -f 指定段号 -c 指定第几个字符 (截取字符串)
[root@test ~]# a=1
[root@test ~]# b=2
[root@test ~]# c=$a$b
[root@test ~]# echo $c
12
[root@test ~]# c='$a$b'
[root@test ~]# echo $c
$a$b
[root@test ~]# c=\$a\$b (脱义)
[root@test ~]# echo $c
$a$b
[root@test ~]# cat passwd |head -2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@test ~]# cat passwd |head -2 |cut -d ":" -f 1,2
root:x
bin:x
[root@test ~]# cat passwd |head -2 |cut -d ":" -f 1-4
root:x:0:0
bin:x:1:1
[root@test ~]# cat passwd |head -2 |cut -c 4
t
:
8.11 sort_wc_uniq命令
sort 排序, -n 以数字排序 -r 反序 -t 分隔符(按照第几段排序) -kn1/-kn1,n2 (一列数字或者字符排序,sort一般和uniq联合使用,默认按照ASCII码排序(数字和字母有ID号))
wc -l 统计行数 -m 统计字符数 -w 统计词
uniq 去重, -c统计行数
[root@test ~]# cat passwd |head -6 |sort
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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
[root@test ~]# cat passwd |sort (ASCII码排序,前面相同的内容,就会看后一个的大小,以此类推下去)
<
>
?
]
{
22221111
22233333333
222aaaaaaaaa
32131231
321321432.txt
342432423432dsfsdfsdfsd
432432.txt
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
dhaskdhkashdkasaaaa22222222222
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
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
$sdfdsfd
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
-n以数字排序,特殊符号和字母视为0
[root@test ~]# sort -n passwd
<
>
?
]
{
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
dhaskdhkashdkasaaaa22222222222
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
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
$sdfdsfd
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
222aaaaaaaaa
432432.txt
22221111
32131231
321321432.txt
22233333333
342432423432dsfsdfsdfsd
-r反序排序
[root@test ~]# sort -nr passwd
342432423432dsfsdfsdfsd
22233333333
321321432.txt
32131231
22221111
432432.txt
222aaaaaaaaa
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
$sdfdsfd
root:x:0:0:root:/root:/bin/bash
postfix:x:89:89::/var/spool/postfix:/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
dhaskdhkashdkasaaaa22222222222
daemon:x:2:2:daemon:/sbin:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
{
]
?
>
<
统计字符数
[root@test ~]# wc -m passwd
648 passwd
648个字符中有$表示换行符也算入
[root@test ~]# cat -A passwd
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$
postfix:x:89:89::/var/spool/postfix:/sbin/nologin$
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin$
chrony:x:997:995::/var/lib/chrony:/sbin/nologin$
dhaskdhkashdkasaaaa22222222222$
342432423432dsfsdfsdfsd$
432432.txt$
321321432.txt$
$sdfdsfd$
32131231$
22233333333$
22221111$
222aaaaaaaaa$
<$
>$
{$
?$
]$
$
统计词 (空格或者空白字符区分,符号还是会认为一整个词)
[root@test ~]# wc -w passwd
27 passwd
去重 (排序后再去重比较好)
[root@test ~]# cat 5.txt;uniq 5.txt (不排序直接去重,隔开的就不会去重)
123
abc dsadsa sdsadas
123
abc
abc
abc
123
123
123
dsahkdhas
dhksahdkas
123
abc dsadsa sdsadas
123
abc
123
dsahkdhas
dhksahdkas
[root@test ~]# sort 5.txt |uniq
123
abc
abc dsadsa sdsadas
dhksahdkas
dsahkdhas
查看去重次数
[root@test ~]# sort 5.txt |uniq -c
2
5 123
3 abc
1 abc dsadsa sdsadas
1 dhksahdkas
1 dsahkdhas
8.12 tee_tr_split命令
tee 比 > 就多了一个立即显示重定向内容的好处
tee 和>类似,重定向的同时还在屏幕显示 -a追加
tr 替换字符,tr 'a' 'b',大小写替换tr '[a-z]' '[A-Z]'
split 切割,-b大小(默认单位字节),-l行数
>将内容重定向至一个文件但是不会把结果告诉用户
[root@test ~]# sort 5.txt |uniq -c >a.txt ;cat a.txt
2
5 123
3 abc
1 abc dsadsa sdsadas
1 dhksahdkas
1 dsahkdhas
tee重定向的同时还在屏幕显示
[root@test ~]# sort 5.txt |uniq -c |tee a.txt
2
5 123
3 abc
1 abc dsadsa sdsadas
1 dhksahdkas
1 dsahkdhas
-a追加
[root@test ~]# sort 5.txt |uniq -c |tee -a a.txt
2
5 123
3 abc
1 abc dsadsa sdsadas
1 dhksahdkas
1 dsahkdhas
[root@test ~]# cat a.txt
2
5 123
3 abc
1 abc dsadsa sdsadas
1 dhksahdkas
1 dsahkdhas
2
5 123
3 abc
1 abc dsadsa sdsadas
1 dhksahdkas
1 dsahkdhas
清空文件命令>
[root@test ~]# >a.txt
tr替换字符
[root@test ~]# echo "skahdkhk" | tr '[ad]' '[AD]'
skAhDkhk
[root@test ~]# echo "skahdkhk" | tr '[a-z]' '[A-Z]'
SKAHDKHK
切割文件(切割日志)
根据文件大小切割
[root@test ~]# split -b 100M bigfile
根据行切割
[root@test ~]# split -l 1000 bigfile
[root@test ~]# find /etc/ -type f -name "*conf" -exec cat {} >>a.txt \; 将/etc/下所有的配置文件追加到a.txt
切割
[root@test 2]# du -sh a.txt
960K a.txt
[root@test 2]# split -b 1k a.txt

指定切割的文件名
[root@test 2]# split -b 100k a.txt abc
[root@test 2]# ls
abcaa abcab abcac abcad abcae abcaf abcag a.txt
指定行切割
[root@test 2]# split -l 1000 a.txt abc
[root@test 2]# ls
abcaa abcac abcae abcag abcai abcak abcam abcao abcaq a.txt
abcab abcad abcaf abcah abcaj abcal abcan abcap abcar
[root@test 2]# wc -l abc*
1000 abcaa
1000 abcab
1000 abcac
1000 abcad
1000 abcae
1000 abcaf
1000 abcag
1000 abcah
1000 abcai
1000 abcaj
1000 abcak
1000 abcal
1000 abcam
1000 abcan
1000 abcao
1000 abcap
1000 abcaq
634 abcar
17634 总用量
8.13 shell特殊符号下
$ 变量前缀,!$组合,正则里面表示行尾
;多条命令写到一行,用分号分割
~ 用户家目录,后面正则表达式表示匹配符
& 放到命令后面,会把命令丢到后台
>(正确重定向,把之前的文件内容清空) >>(正确追加重定向,文件最后追加) 2>(错误重定向) 2>>(错误追加重定向) &>(正确错误输出重定向)
[ ] 指定字符中的一个,[0-9],[a-zA-Z],[abc]
||(或者的意思) 和 && ,用于命令之间
[root@test 2]# for i in `seq 1 10`
> do
> echo $i
> done
1
2
3
4
5
6
7
8
9
10
[root@test 2]# for i in `seq 1 10`; do echo $i; done
||或者的意思,第一条命令执行不成功则执行第二条命令,第一条命令执行成功则不执行第二条命令
[root@test 2]# ls la.txt || wc -l a.txt
ls: 无法访问la.txt: 没有那个文件或目录
17634 a.txt
[root@test 2]# wc -l a.txt || ls sadas.txt
17634 a.txt
&& 第一条命令执行成功则会执行第二条命令,第一条命令执行不成功则不执行第二条命令
[root@test 2]# wc -l a.txt && ls sadas.txt
17634 a.txt
ls: 无法访问sadas.txt: 没有那个文件或目录
[root@test 2]# ls la.txt && wc -l a.txt
ls: 无法访问la.txt: 没有那个文件或目录
实战:
创建一个目录,存在则不创建,不存在则创建
[root@test 2]# ls ys || mkdir ys
ls: 无法访问ys: 没有那个文件或目录
或者:[ -d ]来判断是否是目录,是否存在
[root@test 2]# [ -d yss ] || mkdir yss
判断是否是文件是否存在[ -f ]
[root@test 2]# [ -f 1.txt ] || touch 1.txt
转载于:https://my.oschina.net/u/3803396/blog/2245869
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
