shell特殊符_cut命令
* 任意个任意字符
? 任意一个字符
# 注释字符
\ 脱义字符
[root@localhost:~]# c='$a$b' ====c=\$a\$b
[root@localhost:~]# c=\$a\$b
[root@localhost:~]# echo $c
$a$b
| 管道符
cut 分割,-d 分隔符 -f 指定段号 -c 指定第几个字符
[root@localhost:~]# cat /etc/passwd | cut -d ":" -f 1,2,3 | head -2 //截取
root:x:0
bin:x:1
[root@localhost:~]# cat /etc/passwd | cut -d ":" -f 1-5 | head -2
root:x:0:0:root
bin:x:1:1:bin
sort_wc_uniq命令
sort 排序, -n 以数字排序 -r 反序 -t 分隔符 -kn1/-kn1,n2(了解)
[root@localhost:~]# sort /etc/passwd //按照ASCII编码
adm:x:3:4:adm:/var/adm:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
bin:x:1:1:bin:/bin:/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
[root@localhost:~]# tail -15 1.txt | sort -n //按数字排序,特殊字符和字母都会被认为是0
0
a
b
f
gtsd
4
5
22
23
23
23
44
[root@localhost:~]# tail -15 1.txt | sort -nr //反序
678
44
23
23
23
uniq 去重, -c统计行数
[root@localhost:~]# sort 1.txt |uniq -c //排序去重
2
3 23
1 3
2 4
1 44
2 5
1 678
2 a
1 adm:x:3:4:adm:/var/adm:/sbin/nologin
2 b
wc -l 统计行数 -m 统计字符数 -w 统计词
[root@localhost:~]# wc -l 1.txt //统计行数
38 1.txt
[root@localhost:~]# vi 2.txt
11
22
[root@localhost:~]# wc -m 2.txt //字符数
6 2.txt
[root@localhost:~]# cat -A 2.txt //-A所有字符 $换行符
11$
22$
[root@localhost:~]# wc -w 2.txt //词数 以空白字符作为分隔符
2 2.txt
tee_tr_split命令
tee 和>类似,重定向的同时还在屏幕显示
[root@localhost:~]# sort 1.txt |uniq -c >3.txt //这种方式无法再屏幕输出
[root@localhost:~]# cat 3.txt
2
1 0
1 111
1 22
3 23
1 3
2 4
1 44
2 5
1 678
2 a
1 adm:x:3:4:adm:/var/adm:/sbin/nologin
1 avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
[root@localhost:~]# sort 1.txt |uniq -c | tee 3.txt //重定向在屏幕显示结果
2
1 0
1 111
1 22
3 23
1 3
2 4
1 44
2 5
1 678
[root@localhost:~]# sort 1.txt |uniq -c |tee -a 3.txt //追加-a
tr 替换字符,tr 'a' 'b',大小写替换tr '[a-z]' '[A-Z]'
[root@localhost:~]# echo 'lsxlinux' |tr 'sl' 'SL' //将sl替换成SL
LSxLinux
[root@localhost:~]# echo 'lsxlinux' |tr 'a-z' 'A-Z' //将所有小写字母替换成大写字母
LSXLINUX
[root@localhost:~]# echo 'lsxlinux' |tr 'a-z' '1'
11111111
split 切割,-b大小(默认单位字节),-l行数
[root@localhost ~]# find / -type f -name '*.conf' -exec cat {} > 1.txt \;
[root@localhost:~/test]# split -b 1000 1.txt lsx. //指定前缀
[root@localhost:~/test]# ls
1.txt lsxab lsxad lsxaf lsxah lsxaj lsxal lsxan lsxap lsxar
lsxaa lsxac lsxae lsxag lsxai lsxak lsxam lsxao lsxaq lsxas
[root@localhost test]# du -sb *
[root@localhost:~/test]# split -l 10 1.txt //指定10行
[root@localhost:~/test]# wc -l *
399 1.txt
10 xaa
10 xab
10 xac
shell特殊符号(下)
$ 变量前缀,!$组合,正则里面表示行尾
!$ 命令行表示历史命令里最后一行最后一个参数
;多条命令写到一行,用分号分割
~ 用户家目录,后面正则表达式表示匹配符
& 放到命令后面,会把命令丢到后台
> >> 2> 2>> &>
[ ] 指定字符中的一个,[0-9],[a-zA-Z],[abc]
|| 和 && ,用于命令之间
||或者:当执行前面一句成功就不在执行后面一句(不管后面那句成功与否)
[root@localhost:~/test]# ls xao || lsx xxx
Xao
如果前面执行不成功的继续执行后面一句
[root@localhost:~/test]# lsx xxx || ls xao
-bash: lsx: 未找到命令
xao
&&当前面一句执行不成功的后面不在执行;前面成功的会继续执行后面
[root@localhost:~/test]# ls xao && lsx xxx
xao
-bash: lsx: 未找到命令
[root@localhost:~/test]# lsx xxx && ls xao
-bash: lsx: 未找到命令
本文转自 虾米的春天 51CTO博客,原文链接:http://blog.51cto.com/lsxme/1980883,如需转载请自行联系原作者