2018-1-12 5周5次课

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018-1-12 5周5次课相关的知识,希望对你有一定的参考价值。

8.10 shell特殊符_cut命令


*              任意个任意字符

?              任意一个字符     ?.txt

#              注释字符 不生效,说明文字

\              脱义字符 用在符号前

|              管道符


cut分割

    -d     分隔符

    -f     指定段号

    -c     指定第几个字符

[[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
:
[[email protected] ~]#cat /etc/passwd | head -2 |cut -c 4,5
t:
:x





8.11 sort_wc_uniq命令


·sort 排序

    -n 以数字排序

    -r 反序

    -t 指定栏位分隔符

    -k 是指定需要爱排序的栏位 -nk 1/-nk 1,2

[[email protected] ~]#sort 1.txt
<
>
]
{
1.txt
222222aaaaaaaaa
22333333
22aaa
231312131
2.txt
4888888888888888888adslkfj;a
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
operator:x:11:0:operator:/root:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
*slkdf
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

默认排序是按照 空字符 - 特殊符号 - 数字 - 字母


[[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
halt:x:7:0:halt:/sbin:/sbin/halt
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
*slkdf
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
1.txt
2.txt
22aaa
222222aaaaaaaaa
22333333
231312131
4888888888888888888adslkfj;a
[[email protected] ~]#sort -r 1.txt            ##倒序排列
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
*slkdf
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/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
4888888888888888888adslkfj;a
2.txt
231312131
22aaa
22333333
222222aaaaaaaaa
1.txt
{
]
>
<


·wc 统计

    -l 统计行数

    -m 统计字符数

    -w 统计词

[[email protected] ~]#wc -l 1.txt
21 1.txt
[[email protected] ~]#wc -m 2.txt
8 2.txt
[[email protected] ~]#cat -A 2.txt
123$
abc$
[[email protected] ~]#wc -w 2.txt
2 2.txt


·uniq 去重

    -c统计行数

[[email protected] ~]#cat 2.txt
123
abc 1111,2222
123
abc
1
1
2
[[email protected] ~]#uniq 2.txt
123
abc 1111,2222
123
abc
1
2
[[email protected] ~]#sort -n 2.txt | uniq
abc
abc 1111,2222
1
2
123
[[email protected] ~]#sort -n 2.txt | uniq -c
1 abc
1 abc 1111,2222
2 1
1 2
2 123


参考:http://man.linuxde.net/sort





8.12 tee_tr_split命令


· tee 和 > 类似,重定向的同时还在屏幕显示,而 > 不显示过程

[[email protected] ~]# sort 2.txt
1
1
123
123
2
abc
abc 1111,2222
[[email protected] ~]# sort 2.txt |uniq -c
2 1
2 123
1 2
1 abc
1 abc 1111,2222
[[email protected] ~]# sort 2.txt |uniq -c > a.txt
[[email protected] ~]# sort 2.txt |uniq -c |tee b.txt
2 1
2 123
1 2
1 abc
1 abc 1111,2222
[[email protected] ~]# cat b.txt
2 1
2 123
1 2
1 abc
1 abc 1111,2222


·tee -a 和 >> 类似,追加的同时还在屏幕显示,而 >>不显示过程

[[email protected] ~]# sort 2.txt |uniq -c |tee -a b.txt
2 1
2 123
1 2
1 abc
1 abc 1111,2222
[[email protected] ~]# cat b.txt
2 1
2 123
1 2
1 abc
1 abc 1111,2222
2 1
2 123
1 2
1 abc
1 abc 1111,2222


· tr 替换字符:tr 'a' 'b'           (tr=translate)

大小写替换 tr '[a-z]' '[A-Z]'
[[email protected] ~]# echo "arsenal" | tr '[al]' '[AL]'
ArsenAL
[[email protected] ~]# echo "arsenal" | tr 'a' 'A'
ArsenAl
[[email protected] ~]# echo "arsenal" | tr '[a-z]' '[A-Z]'
ARSENAL
[[email protected] ~]# echo "arsenal" | tr '[a-z]' '1'
1111111
[[email protected] ~]# echo "arsenal" | tr '[a-z]' '[1]'      ##单个数字或字母不要用[ ]括起来,会出错
1]]]]1]

 

·split 切割           (文件过大,切割方便操作)

    -b 按大小切割(默认单位字节,如果不写单位,就会按100B切割)

    -l  按行数切割

[[email protected] ~]# split -b 100M bigfile##把文件按每100M大小切割
[[email protected] ~]# split -l 1000 bigfile##把文件按每1000行进行切割
[[email protected] ~]# ls
1.txt  2.txt  anaconda-ks.cfg  b.txt
[[email protected] ~]# find /etc/ -type f -name "*.conf" -exec cat {} >> a.txt \;
[[email protected] ~]# ll -h a.txt
-rw-r--r--. 1 root root 238K 1月   8 13:21 a.txt
[[email protected] ~]# mkdir test/
[[email protected] ~]# mv a.txt test/
[[email protected] ~]# cd test/
[[email protected] test]# ls
a.txt
[[email protected] test]# split -b 1000 a.txt
文件过多,不详细列出
[[email protected] test]# rm -f x*
[[email protected] test]# ll -h
总用量 240K
-rw-r--r--. 1 root root 238K 1月   8 13:21 a.txt


·指定切割出文件的前缀 (切割后前缀为abc后面根据aa,ab...ba,bb,...排列)

[[email protected] test]# split -b 100k a.txt abc
[[email protected] test]# ls
abcaa  abcab  abcac  a.txt
[[email protected] test]# rm -f abc*
[[email protected] test]# ls
a.txt
[[email protected] test]# split -b 100k a.txt abc.
[[email protected] test]# ls
abc.aa  abc.ab  abc.ac  a.txt


·按行来切割:split -l 行数 文件

[[email protected] test]# split -l 1000 a.txt
[[email protected] test]# wc -l *
2391 abc.aa
2694 abc.ab
1011 abc.ac
6096 a.txt
1000 xaa
1000 xab
1000 xac
1000 xad
1000 xae
1000 xaf
96 xag





8.13 shell特殊符号(下)

$     变量前缀,!$组合,正则里面表示行尾

;     多条命令写到一行,用分号分割

[[email protected] test]# for i in `seq 1 10`
> do
> echo $i
> done
1
2
3
4
5
6
7
8
9
10
[[email protected] test]# for i in `seq 1 10`; do echo $i; done
[[email protected] test]# cd
[[email protected] ~]# ls
1.txt  2.txt  anaconda-ks.cfg  b.txt  test
[[email protected] ~]# ls 1.txt ; wc -l 2.txt       ##想要同时执行多条命令,用 ; 分隔
1.txt
7 2.tx

~                 用户家目录,后面正则表达式表示匹配符

&                 放到命令后面,会把命令丢到后台

>                 正确重定向,覆盖源文件

>>              追加正确重定向

2>               错误重定向

2>>             追加错误重定向

&>               正确错误全部重定向到一个文件

[ ]                 指定字符中的一个,[0-9],[a-zA-Z],[abc]

|| 和 &&       用于命令之间

[[email protected] ~]# ls
1.txt  2.txt  anaconda-ks.cfg  b.txt  test
[[email protected] ~]# ls a.txt || wc -l 2.txt        ##||(第一条命令不成功,则执行第二条)
ls: 无法访问a.txt: 没有那个文件或目录
7 2.txt
[[email protected] ~]# ls 1.txt || wc -l 2.txt         ##||(第一条命令成功,则不执行第二条)
1.txt
[[email protected] ~]# ls a.txt && wc -l 2.txt         ##&&(第一条命令不成功,则不执行后面命令)
ls: 无法访问a.txt: 没有那个文件或目录
[[email protected] ~]# ls 1.txt && wc -l 2.txt         ##&&(第一条命令成功,则执行后面的命令)
1.txt
7 2.txt
[[email protected] ~]# [ -d aminglinux ] || mkdir aminglinux##存在则不执行,不存在则执行
[[email protected] ~]# ls##[ -d xxx]  判断目录存在与否
1.txt  2.txt  aminglinux  anaconda-ks.cfg  b.txt  test
[[email protected] ~]# [ -d aminglinux ] && mkdir aminglinux##存在则执行,不存在则不执行
mkdir: 无法创建目录"aminglinux": 文件已存在


以上是关于2018-1-12 5周5次课的主要内容,如果未能解决你的问题,请参考以下文章

2018-1-12 5周5次课

2018-1-8 5周1次课

2017.12.15 1周5次课

2018.2.27 9周5次课

2018.1.5 4周4次课

2018.3.23 13周5次课