二十五 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, 普通用户得为 / hone/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
来源: http://www.bubuko.com/infodetail-2521873.html