一.高效快捷命令
1.快捷排序——sort
- 以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序
- 比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
语法格式
sort [选项] 参数
cat file | sort 选项
-n | 按照数子大小进行排序 |
-r | 反向排序 (配合-n使用) |
-u | 排序后去重(表示相同的数据仅显示一行重复的内容) |
-t '字段分隔符' -k 字段序号 | 根据-t 指定的分隔符的第 k个字段进行排序 |
-k | 指定排序字段 |
-o <输出文件> | 将排序后的结果转存至指定文件(排好序重新定向输出) |
-f | 忽略大小写,把小写字母也当作大写字母看待 |
-b | 忽略每行前面的空格 |
sort -n 和sort -n -r
sort -u
sort -o
2.快捷去重——uniq
uniq命令用于报告或者忽略文件中连续的重复行,常与sort命令结合使用。
uniq [选项] 参数
cat file | uniq 选项
常用选项:
-c | 对连续的重复行进行去重,并统计重复次数 |
-d | 仅输出连续重复的行 |
-u | 仅输出不连续重复的行 |
uniq -c
uniq -u
uniq -d
3.快捷替换——tr
3.1 tr基本用法
常用来对来自标准输入的字符进行替换,压缩,和删除
格式: cat 文件| tr [选项] 参数
-c | 保留字符集1的字符,其他字符包括换行符\n用字符集2替换 |
-d | 删除所有属于字符集1的字符 |
-s | 将连续重复的字符串压缩成一个 |
-t | 字符集2 替换 字符集1,不加选项效果相同 |
默认的基本用法 :
tr-c:保留字符集1的字符,其他字符包括换行符\n用字符集2替换
tr -d :删除所有属于字符集1的字符
tr -s:将连续重复的字符串压缩成一个
删除空行
cat 文件 | grep -v "^$"
cat 文件 | tr -s "\n"
echo -e "aa\n\n\n\n\nbb" | tr -s "\n"
对数组排序
echo ${数组名[@]} | tr ' ' '\n' | sort -rn | tr '\n' ' '
cut 对行内容进行字段截取
cut 参数
cat file | cut 选项
-d '分隔符' -f 字段序号 | 根据 -d 指定的分隔符的截取显示 -f 指定的字段 |
--complement | 取反,不显示 -f 指定的字段 |
--output-delimiter '分隔符' | 指定输出的字段分隔符 |
split命令
- linux下将一个大的文件拆分成若干小文件
语法格式
split 选项 参数 原始文件 拆分后文件名前缀
常用选项
- –l :以行数拆分
- –b :以大小拆分
split -l 50 /etc/passwd passwd #以50行对文件进行拆分,最后一个文件的行数没有50行以实际行数进行分配
paste命令
- 用于合并文件的列
paste [-s][-d <间隔字符>] 文件...
常用选项
- -d<间隔字符> :用指定的间隔字符取代制表符
- -s :把多行内容合并为一行进行显示
eval命令
- 命令字前加上eval时,shell会在执行命令之前扫描它两次。eval命令将首先会先扫描命令行进行所有的置换,然后再执行该命令。该命令适用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。
二.正则表达式
1.正则表达式概述
正则表达式:通常用于判断语句中,用来检查某一字符串是否满足某一格式。
- 正则表达式是由普通字符与元字符组成.
- 普通字符包括大小写字母、数字、标点符号及一些其他符号.
- 元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符或表达式)在目标对象中的出现模式.
注意:
linux命令行的常用通配符有* ? […]:匹配文件或目录名;正则表达式:用来匹配文件内容,[.\n]表示匹配所有字符.
基础正则表达式常见元字符有:(支持的工具:grep、egrep、sed、 awk )
2. 常用选项
选项 | 命令含义 |
---|---|
\ | 转义字符,用于取消特殊符号的含义,例:!、\n、$等 |
^ | 匹配字符串开始的位置,例:^a、^the、^#、^[a-z] |
$ | 匹配字符串结束的位置,例:word$、^$匹配空行 |
. | 匹配除\n之外的任意的一个字符,例:go.d、g…d |
* | 匹配前面子表达式0次或者多次,例:goo*d、go.*d |
[list] | 匹配list列表中的一个字符,例:go[ola]d,[abc]、[a-z]、[a-z0-9]、[0-9]匹配任意一位数字 |
[^list] | 匹配任意非list列表中的一个字符,例:[^0-9]、[^A-Z0-9]、[^a-z]匹配任意一位非小写字母 |
\{n\} | 匹配前面的子表达式n次,例:go\{2\}d、'[0-9]\{2\}'匹配两位数字 |
\{n,\} | 匹配前面的子表达式不少于n次,例:go\{2,\}d、'[0-9]\{2,\}'匹配两位及两位以上数字 |
\{n,m\} | 匹配前面的子表达式n到m次,例:go\{2,3\}d、'[0-9]\{2,3\}'匹配两位到三位数字 |
注意 | egrep、awk使用{n}、{n,}、{n,m}匹配时“{}”不用加“\” |
\w | 匹配包括下划线的任何单词字符,等价于[A-Za-z0-9_] |
\W | 匹配任何非单词字符,等价于[^A-Za-z0-9_] |
\d | 匹配一个数字字符,等价于[0-9] |
\D | 匹配一个非数字字符。等价于 [^0-9] |
\s | 空白符 |
\S | 非空白符 |
扩展正则表达式元字符 | (支持的工具:egrep、awk)grep -E sed -r |
+ | 匹配前面子表达式1次以上,例:go+d,将匹配至少一个o,如god、good、goood等 |
? | 匹配前面子表达式0次或者1次,例:go?d,将匹配gd或god |
() | 将括号中的字符串作为一个整体,例:g(oo)+d,将匹配oo整体1次以上,如good、gooood等 |
| | 以或的方式匹配字符串,例:g(oo|la)d,将匹配good或者glad |
正则表示中*和.的用法
*
:匹配前面的子表达式零次或多次。例如,zo*
能匹配 "z" 以及 "zoo"。.
:匹配除换行符以外的任意字符。例如,a.c
可以匹配 "abc"、"aec"、"acc"等。
[root@localhost ~]# grep "do*g" dog.txt
dog
dog
dog
dog
m;dsmklmnddog
########
*: 匹配前面的字符(在这里是'o')零次或多次。这意味着'o'可以出现一次或者不出现。
查看 '1' 以为开头 查看以 '3' 为结尾的文件内容
[root@localhost tr]#grep '^1' math.txt
[root@localhost tr]#grep '3$' math.txt
[root@localhost ~]# grep "^do*g$" dog.txt
dog
dog
dog
dog
#########
搜索所有整行严格匹配至少一个'd'、零个或多个'o'、以及至少一个'g'的行,并将这些行输出到终端
[root@localhost ~]# egrep "do{5,8}" dog.txt
doooooog
dooooooooooooog
doooooooooooooog
dooooog
dooooooooooooooooooooooooooooooooooog
doooooog
doooooooooog
[root@localhost ~]# egrep "do+g" dog.txt
dog
dog
doooooog
dooooooooooooog
doooooooooooooog
dooooog
dooooooooooooooooooooooooooooooooooog
doooog
doooooog
doooooooooog
[root@localhost ~]# egrep "do?g" dog.txt
dog
dog
[root@localhost ~]# egrep '(dog)' dog.txt
dog
dog
[root@localhost ~]# egrep 'dog|fdog' dog.txt
dog
dog