8.10 shell特殊符号cut命令
8.10.1 特殊符号
符号 * : 任意个任意字符
符号 ? : 任意一个字符
符号 # : 注释字符,即#后面的内容linux忽略掉
符号 \ : 转义字符,将后面的特殊符号(例如"")还原为普通字符
符号 | : 管道符,将符号前面命令的结果丢给符号后面的命令后面的命令,后面的命令通常是对文档操作的命令 ,例如cat,less,head,tail,grep.
8.10.2
cut命令,用来截取某一个字段
语法: cut -d "分隔字符" [-cf] n 这里的n是数字
-d : 指定分隔字符
-f : 指定段号(段与段间以分隔符隔开)
-c : 指定第几个字符
<------------------------------------------------------------->
[root@kh-01 ~]# cat /etc/passwd | head -n2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@kh-01 ~]# cat /etc/passwd | head -n2 | cut -d ":" -f1
root
bin
[root@kh-01 ~]# cat /etc/passwd | head -n2 | cut -d ":" -f3-5
0:0:root
1:1:bin
[root@kh-01 ~]# cat /etc/passwd | head -n2 | cut -c1
r
b
[root@kh-01 ~]# cat /etc/passwd | head -n2 | cut -c1-3
roo
bin
<------------------------------------------------------------->
注意:-c与-f不能同时使用,否则会报错,如下图:
<---------------------------------------------------------------->
[root@kh-01 ~]# cat /etc/passwd | head -n2 | cut -c1-3 -d ":" -f1
cut: 只能指定列表中的一种类型
Try 'cut --help' for more information.
[root@kh-01 ~]#
<---------------------------------------------------------------->
8.11 sort_wc_uniq命令
8.11.1
sort命令,用于排序.
语法: sort [-t 分隔符] [-kn1,n2] [-nru] 这里的n1 < n2
-t : 后跟分隔符,作用跟cut的-d一个意思
-n : 使用纯数字排序(注意:像字母,特殊符号之类非数字的,系统会认为它是0)
-r : 反向排序
-u : 去重复
-kn1,n2 : 由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序
如果sort不加任何选项,则从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
8.11.2
wc命令,用于统计文档的行数、词数、字符数.
-l : 统计行数
-w : 统计词数
-m : 统计字符数
wc 不跟任何选项,直接跟文档,则会把行数、词数、字符数依次输出。
<----------------------------------->
[root@kh-01 ~]# wc -l /etc/passwd
25 /etc/passwd
[root@kh-01 ~]# wc -w /etc/passwd
45 /etc/passwd
[root@kh-01 ~]# wc -m /etc/passwd
1169 /etc/passwd
[root@kh-01 ~]# wc /etc/passwd
25 45 1169 /etc/passwd
[root@kh-01 ~]#
注意-m统计字符数,它是会把换行符也算上的!
[root@kh-01 ~]# cat 2.txt
1234
[root@kh-01 ~]# wc -m 2.txt
5 2.txt
[root@kh-01 ~]# cat -A 2.txt
1234$
[root@kh-01 ~]#
<----------------------------------->
8.11.3
uniq命令,用于去除重复的行.
-c : 统计重复的行数,并把行数写在前面.
注意:使用uniq的前提是需要先给文件排序,否则不管用.
<------------------------------------------->
[root@kh-01 ~]# uniq 2.txt
111
333
222
111
555
[root@kh-01 ~]# sort -n 2.txt | uniq
111
222
333
555
[root@kh-01 ~]# sort -n 2.txt | uniq -c
2 111
1 222
1 333
1 555
[root@kh-01 ~]#
<------------------------------------------->
!!注意,使用sort,uniq命令并不会更改原文件的内容,它们只是对原文件内容做了一些加工然后输出到屏幕上而已,原文件内容并没有改变.
8.12 tee_tr_split命令
8.12.1
tee命令
后跟文件名,类似重定向>,但重定向同时还显示在屏幕上,tee常用于管道符"|"后.
<---------------------------------------------------------->
[root@kh-01 ~]# sort -n 2.txt | uniq -c | tee 1.txt
2 111
1 222
1 333
1 555
[root@kh-01 ~]# cat 1.txt
2 111
1 222
1 333
1 555
tee -a 类似追加重定向>>,如下例:
[root@kh-01 ~]# cat 1.txt
2 111
1 222
1 333
1 555
[root@kh-01 ~]# sort -n 2.txt | uniq -c | tee -a 1.txt
2 111
1 222
1 333
1 555
[root@kh-01 ~]# cat 1.txt
2 111
1 222
1 333
1 555
2 111
1 222
1 333
1 555
[root@kh-01 ~]#
<---------------------------------------------------------->
8.12.2
tr命令
用于替换字符,常用来处理文档中出现的特殊符号.
最常用的就是把小写变大写: tr '[a-z]' '[A-Z]'
<----------------------------------------------------------------->
[root@kh-01 ~]# echo "helloworld" | tr 'h' 'H'
Helloworld
[root@kh-01 ~]# echo "helloworld" | tr '[hw]' '[HW]'
HelloWorld
[root@kh-01 ~]# echo "helloworldw" | tr '[hw]' '[HW]'
HelloWorldW
[root@kh-01 ~]# echo "helloworldw" | tr '[a-z]' '[A-Z]'
HELLOWORLDW
<----------------------------------------------------------------->
不足之处:
tr命令替换、删除以及去重复都是针对一个字符来讲的,不能针对一个字符串,有一定局限性.
8.12.3
split命令
用于切割文档,常用选项:
-b : 依据大小来分割文档,默认单位为byte
-l : 依据行数来分割文档
<----------------------------------------------------------------------------------->
[root@kh-01 test2]# ls
1.txt
[root@kh-01 test2]# du -sh 1.txt
256K 1.txt
[root@kh-01 test2]# split -b 10000 1.txt
[root@kh-01 test2]# ls
1.txt xab xad xaf xah xaj xal xan xap xar xat xav xax xaz
xaa xac xae xag xai xak xam xao xaq xas xau xaw xay
[root@kh-01 test2]# rm -f x
[root@kh-01 test2]# ls
1.txt
[root@kh-01 test2]# split -l 1000 1.txt
[root@kh-01 test2]# ls
1.txt xaa xab xac xad xae xaf xag
[root@kh-01 test2]# du -sh
256K 1.txt
44K xaa
44K xab
40K xac
40K xad
36K xae
40K xaf
20K xag
[root@kh-01 test2]#
<----------------------------------------------------------------------------------->
8.13 shell特殊符号下
- 符号 $
变量前缀,!$组合,表示上条命中中最后一个变量,假如上边命令最后是test.txt那么****在当前命令下输入!$则代表test.txt.在正则里面则表示行尾. - 符号 ;
多条命令写到一行时,用分号来分隔. - 符号 ~
用户的家目录,如果是root则是/root,普通用户则是/home/username - 符号 &
放到命令后面,会把命令丢到后台执行. - 符号 >
重定向 - 符号 >>
追加重定向 - 符号 2>
错误重定向 - 符号 2>>
错误追加重定向 - 符号 &>
不论命令执行结果如何(正确/错误)都重定向 - 符号 []
指定字符串中的一个,[0-9],[a-zA-Z],[abc] - 符号 &&
用于命令之间,比如command1 && command2,只有command1执行成功后,command2才会执行,否则command2不执行.
符号 ||
用于命令之间,比如command1 || command2,command1执行成功后command2不执行,否则去执行command2,总之command1和command2总有一条命令会执行.
关于&>的演示示例:
<----------------------------------------------------------------->
[root@kh-01 ~]# ls
2.txt 3.txt anaconda-ks.cfg err.txt result.txt test test2
[root@kh-01 ~]# cat result.txt
[root@kh-01 ~]# cat 2.txt
111
333
222
111
555
[root@kh-01 ~]# cat 2.txt &> result.txt
[root@kh-01 ~]# cat result.txt
111
333
222
111
555
[root@kh-01 ~]# >result.txt #清空result.txt
[root@kh-01 ~]# cat result.txt
[root@kh-01 ~]# ls 1.txt &> result.txt
[root@kh-01 ~]# cat result.txt
ls: 无法访问1.txt: 没有那个文件或目录
[root@kh-01 ~]#
<----------------------------------------------------------------->
转载于:https://blog.51cto.com/13517946/2060356