二十五、shell特殊符号cut命令、sort_wc_uniq命令、 tee_tr_split命令、 shell特殊符号下

一、shell特殊符号cut命令

特殊符号

*:通配。

?:任意一个字符。

#:注释字符,加在命令前面命令就不会生效。

\:脱义字符。会将后面的特殊符号(如*)还原为普通字符。示例:

# ls -d 123\*

ls: 无法访问123*: 没有那个文件或目录

cut命令:截取某一个字段。分隔。

格式:# cut -d '分隔字符' [-cf] n,n为数字。

可用选项:

-d:后面指定分隔字符,分隔字符要用引号括起来,单引号或双引号都可以。

-c:后面接的是第几个字符。使用该参数就不要用-d和-f了。

-f:后面接的是第几个区块。指定段号。

用法示例:

# cat /etc/passwd|cut -d ':' -f 1 |head -2

root

bin

# cat /etc/passwd|head -2|cut  -d ':' -f 1-5

root:x:0:0:root

bin:x:1:1:bin

# cat /etc/p sswd|cut -c 4 |head -2

t

:

sort命令:用作排序。

格式:# sort [-t 分隔符] [-kn1,n2] [-nru]

-t:后面跟分隔字符,作用和cut的-d选项一样。

-n:使用纯数字排序。

-r:反向排序。

-u:去重复。

-kn1,n2:由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序。

不加任何选项时,则从首字符向后依次按ASCII码值进行比较,最后将它们按升序输出。

用法示例:

# head -n5 /etc/passwd |sort -t: -k2 -n

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

# head -n3 /etc/passwd |sort -t: -k3,5 -r

daemon:x:2:2:daemon:/sbin:/sbin/nologin

bin:x:1:1:bin:/bin:/sbin/nologin

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

wc命令:用于统计文档的行数、字符数或词数。

-l:统计行数

-m:统计字符数

-w:统计词数

用法示例:

# wc /etc/passwd

21  29 921 /etc/passwd

# wc -l /etc/passwd

21 /etc/passwd

# wc -m /etc/passwd

921 /etc/passwd

# wc -w /etc/passwd

29 /etc/passwd

# wc -m 1.txt

4 1.txt

# cat -A 1.txt       $有一个换行符,因此是4个字符。

l$

f$

uniq命令:去重复。一般和sort一起用,先排序,再去重。

-c:统计重复的行数。

示例:

# cat 1.txt

123

321

abc

123

abc

456

# sort 1.txt |uniq -c

1

2 123

1 321

1 456

2 abc

tee命令:后面跟文件名,作用类似于重定向>,但它比重定向多一个功能,即把文件写入后面所跟的文件时,还显示在屏幕上。该命令常用于管道符后。

-a:追加。

示例:

# echo 'aaaaa' |tee 1.txt

aaaaa

# cat 1.txt

aaaaa

# echo 'aaaaabc' |tee -a 1.txt

aaaaabc

# cat 1.txt

aaaaa

aaaaabc

tr命令:替换字符,针对字符操作。

常用选项:

-d:删除某个字符,后面跟要删除的字符。

-s:删除重复的字符。

常用于把小写字母变成大写。如tr '[a-z]' '[A-Z]'。

示例:

# echo abcde |tr 'a' 'A'

Abcde

split命令:切割文档。

常用选项:

-b:依据大小来分割文档,默认单位为byte。

-l:依据行数来切割文档。

示例:

# split -b 500 passwd 123     指定大小的同时还可以指定文件名,示例为123。

四、特殊符号(下)

$:用作变量前面的标识符,还可以和!结合起来使用,!$正则里面表示行尾。

;:在一行内运行两个或以上的命令时,在命令之间加符号;。

~:用户的家目录,root用户的家目录为/root,普通用户得为/home/username。正则表达式表示匹配符。

&:用于把一条命令放到后台执行,通常用于命令运行时间较长的情况。示例:

# sleep 100 &

[1] 1529

# jobs

[1]+  运行中               sleep 100 &

2>或者2>>:错误重定向,错误追加重定向。重定向一个文本。

示例:

# ls aaa

ls: 无法访问aaa: 没有那个文件或目录

# ls aaa 2> /tmp/123

# cat /tmp/123

ls: 无法访问aaa: 没有那个文件或目录

# ls aaa 2>> /tmp/123

# cat /tmp/123

ls: 无法访问aaa: 没有那个文件或目录

ls: 无法访问aaa: 没有那个文件或目录

中括号[]:中括号内为字符组合,代表字符组合中的任意一个,可以是一个范围。

示例:# ls -d test[1-3].txt

&&、||:

# command1 ; command2

# command1 && command2

# command1 || command2

使用;时,不管command1是否执行成功,都会执行command2.

使用&&时,只有command1执行成功后,command2才会执行,否则command2不执行。

使用||时,command1执行成功后则command2不执行,否则执行command2,即command1和command2中总有一条命令会执行。示例:

# touch test3;touch test1

# ls

test1  test3

# ls test2 && touch test2

ls: 无法访问test2: 没有那个文件或目录

# ls test2 ||touch test2

ls: 无法访问test2: 没有那个文件或目录

# ls test*

test1  test2  test3