linux 学习笔记-025- shell 特殊符号 cut,sort,wc,uniq,tee,tr,split

发布于 2018-01-30  304 次阅读


shell 特殊符 _cut 命令

*:任意个任意字符

?:任意一个字符

#:注释字符,加了#号,命令会不生效

\:脱义字符,如 c=\$a\$b

|:管道符

cut:选定分隔符,截取需要的内容

-d 分隔符,-f 指定段号,-c 指定第几个字符(一般单独使用)

[root@am-01 ~]# cat /etc/passwd | head -5

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

[root@am-01 ~]# cat /etc/passwd | head -5 | cut -d ":" -f 1-3

root:x:0

bin:x:1

daemon:x:2

adm:x:3

lp:x:4

[root@am-01 ~]# cat /etc/passwd | head -5 | cut -c 5

:

x

o

x

:

sort_wc_uniq 命令

sort:排序,默认按ASCII码值进行比较,最后将他们按升序输出

-n 以数字排序(字母和特殊符号会认为是 0),-r 反序,-t 分隔符 -kn1/-kn1,n2(了解即可,-k 可以指定列数)

[root@am-01 ~]# cat /etc/passwd | head -5 > /tmp/1.txt

[root@am-01 ~]# vim /tmp/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

111

333

123

321

sad

qdg

aaa

#

%

^

[root@am-01 ~]# sort /tmp/1.txt

^

#

%

111

123

321

333

aaa

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

qdg

root:x:0:0:root:/root:/bin/bash

sad

[root@am-01 ~]# sort -n /tmp/1.txt

^

#

%

aaa

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

qdg

root:x:0:0:root:/root:/bin/bash

sad

111

123

321

333

[root@am-01 ~]# sort -nr /tmp/1.txt

333

321

123

111

sad

root:x:0:0:root:/root:/bin/bash

qdg

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

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

aaa

%

#

^

[root@am-01 ~]# sort -t : -k3 /tmp/1.txt

^

#

%

111

123

321

333

aaa

qdg

sad

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

wc:统计

-l 统计行数,-m 统计字符数(会把换行符$也算入内),-w 统计词(以空格或空白字符区分)

[root@am-01 ~]# wc -l /tmp/1.txt

15 /tmp/1.txt

[root@am-01 ~]# wc -m /tmp/1.txt

217 /tmp/1.txt

[root@am-01 ~]# wc -w /tmp/1.txt

15 /tmp/1.txt

uniq:去重,需要先排序,再去重

-c 统计行数

[root@am-01 ~]# cat /tmp/2.txt

115

231

525

231

115

1

1

2

[root@am-01 ~]# uniq /tmp/2.txt

115

231

525

231

115

1

2

[root@am-01 ~]# sort /tmp/2.txt |uniq

1

115

2

231

525

[root@am-01 ~]# sort /tmp/2.txt |uniq -c

      2 1

      2 115

      1 2

      2 231

      1 525

tee_tr_split 命令

tee:和>类似,重定向的同时还在屏幕显示

[root@am-01 ~]# sort /tmp/2.txt |uniq -c |tee /tmp/3.txt

      2 1

      2 115

      1 2

      2 231

      1 525

[root@am-01 ~]# cat /tmp/3.txt

      2 1

      2 115

      1 2

      2 231

      1 525

[root@am-01 ~]# sort /tmp/2.txt |uniq -c |tee -a /tmp/3.txt

      2 1

      2 115

      1 2

      2 231

      1 525

[root@am-01 ~]# cat /tmp/3.txt

      2 1

      2 115

      1 2

      2 231

      1 525

      2 1

      2 115

      1 2

      2 231

      1 525

tr:替换字符

tr 'a' 'b',大小写替换 tr '[a-z]' '[A-Z]'

[root@am-01 ~]# echo "aminglinux" | tr '[al]' '[AL]'

AmingLinux

[root@am-01 ~]# echo "aminglinux" | tr 'a' 'A'

Aminglinux

[root@am-01 ~]# echo "aminglinux" | tr '[a-z]' '[A-Z]'

AMINGLINUX

[root@am-01 ~]# echo "aminglinux" | tr '[a-z]' '1'

1111111111

split:切割

-b 大小(默认单位字节),-l 行数

切割一个文件不指定文件名,会生成以 x 开头的文件

root@am-01:/tmp# find /etc/ -type f -name "*.conf" -exec cat {} > /tmp/a.txt \;

root@am-01:/tmp# du -sh a.txt

232K a.txt

root@am-01:/tmp# mkdir test

root@am-01:/tmp# mv a.txt test/

root@am-01:/tmp# cd test/

root@am-01:/tmp/test# ls

a.txt

root@am-01:/tmp/test# split -b 100k a.txt

root@am-01:/tmp/test# ls

a.txt  xaa  xab  xac

root@am-01:/tmp/test# du -sh *

232K a.txt

100K xaa

100K xab

32K xac

root@am-01:/tmp/test# split -b 100k a.txt abc.    #指定文件名的前缀

root@am-01:/tmp/test# ls

abc.aa  abc.ab  abc.ac  a.txt  xaa  xab  xac

root@am-01:/tmp/test# split -l 1000 a.txt

root@am-01:/tmp/test# ls

a.txt  xaa  xab  xac  xad  xae  xaf

root@am-01:/tmp/test# wc -l *

  5979 a.txt

  1000 xaa

  1000 xab

  1000 xac

  1000 xad

  1000 xae

   979 xaf

 11958 总用量

其他特殊符号

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

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

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

> >> 2> 2>> &> 输入输出重定向相关:

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

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

root@am-01:/tmp# ls 1.txt ; wc -l 2.txt    #使用分号 ; 分割两条命令

1.txt

8 2.txt

|| 和 && ,用于命令之间

使用||,当前面的命令执行失败,则执行下一条命令,当前面的命令执行成功,则不执行下一条命令

root@am-01:/tmp# ls 1a.txt || wc -l 2.txt

ls: 无法访问 1a.txt: 没有那个文件或目录

8 2.txt

root@am-01:/tmp# ls 1.txt || wc -l 2.txt

1.txt

使用&&,当前面的命令执行失败,则不执行下一条命令,当前面的命令执行成功,则执行下一条命令

root@am-01:/tmp# ls 1a.txt && wc -l 2.txt

ls: 无法访问 1a.txt: 没有那个文件或目录

root@am-01:/tmp# ls 1.txt && wc -l 2.txt

1.txt

8 2.txt

扩展

判断 aminglinux 是否是目录并且是否存在,如果 aminglinux 是目录并且存在,则不执行下一条命令

root@am-01:/tmp# [ -d aminglinux ] || mkdir aminglinux/

判断 aminglinux 是否是目录并且是否存在,如果 aminglinux 是目录并且存在,则执行下一条命令

root@am-01:/tmp# [ -d aminglinux ] && mkdir aminglinux/

mkdir: 无法创建目录"aminglinux/": 文件已存在

 

ASCII 码对照表:

http://ascii.911cha.com/

source exec 区别:

http://alsww.blog.51cto.com/2001924/1113112

Linux 特殊符号大全:

http://ask.apelearn.com/question/7720

sort 并未按 ASCII 排序:

http://blog.csdn.net/zenghui08/article/details/7938975