目录
常见元字符(支持的工具:find、grep、egrep、sed和awk)
扩展正则表达式元字符(支持的工具:egrep、awk)grep -E sed -r
常见元字符(支持的工具:find、grep、egrep、sed和awk)
一、常见的管道命令
1.1sort命令
sort命令可针对文本文件的内容,以行为单位来排序
格式:sort [选项] 参数
sort命令默认排序1..9..AaBb...Zz
-f | 忽略大小写,会将小写字母都转换为大写字母来进行比较 |
-b | 忽略每行前面的空格 |
-n | 按照数字进行排序 |
-r | 反向排序 |
-u | 等同于uniq,表示相同的数据仅显示一行 |
-t | 指定字段分隔符,默认使用[Tab]键分隔 |
-k | 指定排序字段 |
-o | 将排序后的结果转存至指定文件 |
1.2uniq命令
uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用
格式:uniq [选项] 参数
-c | 进行计数,并删除文件中重复出现的行 |
-d | 仅显示连续的重复行 |
-u | 仅显示出现一次的行 |
1.3tr命令
常用来对来自标准输入的字符进行替换、压缩和删除。
常用选项
选项 | 说明 |
-c | 保留字符集1的字符,其他的字符用(包括换行符\n)字符集2替换 |
-d | 删除所有属于字符集1的字符 |
-s | 将重复出现的字符串压缩为一个字符串;用字符集2 替换 字符集1 |
-t | 字符集2 替换 字符集1,不加选项同结果 |
echo 的末尾会添加一个换行符
常用参数
参数 | 说明 |
字符集1 | 指定要转换或删除的原字符集。当执行转换操作时,必须使用参数“字符集2”指定转换的目标字符集。但执行删除操作时,不需要参数“字符集2” |
字符集2 | 指定要转换成的目标字符集 |
1.4cut命令
显示行中的指定部分,删除文件中指定字段
格式:cut [选项] 参数
-b | 截取字符串(下标从一开始) |
-f | 通过指定哪一个字段进行提取。cut命令使用“TAB”作为默认的字段分割符 |
-d | “TAB”是默认的分隔符,使用此选项可更改为其他的分隔符 |
- -complement | 用于排除所指定的字段 |
- -output-delimiter | 更改输出内容的分隔符 |
1.5 split命令
split命令可以将大文件分割成较小的文件,在默认情况下将按照每1000行切割成一个小文件
格式:split [参数] [切割文件][文件名]
-l 指定行分割
-b 指定大小分割(字节)
1.6paste命令
paste单词意思是粘贴。该命令主要用来将多个文件的内容合并,与cut命令完成的功能刚好相反(默认制表符分隔,-d指定合并后的分割符)
-s 行列互换 paste -s
-d 指定合并后的分割符 paste -d ':' c d
1.7eval命令
二、正则表达式
-
正则表达式,又称正规表达式、常规表达式
-
使用字符串来描述、匹配一系列符合某个规则的字符串
-
正则表达式组成
-
普通字符包括大小写字母、数字、标点符号及一些其他符号。
-
元字符是指在正则表达式中具有特殊意义的专用字符
-
常见元字符(支持的工具:find、grep、egrep、sed和awk)
\ | 转义字符,用于取消特殊符号含义,例如\! \n |
^ | 匹配字符串开始的位置 |
$ | 匹配字符串结束的位置 |
. | 匹配除\n之外的任意一个字符:例如 go.d |
* | 匹配前面子表达式0次或n次 |
[list] | 匹配list列表中的一个字符[a-z] [0-9] [abc] |
[^list] | 匹配任意非List列表中的字符 [^0-9] [^A-z0-9] |
\{n\} | 匹配前面的子表达式n次 go\{2\}d '[0-9]\{2,\}'匹配两位数字 |
\{n,\} | 匹配前面的子表达式不少于n次 匹配两位及两位以上的数字 |
\{n,m\} | 匹配前面子表达式n到m次 '[0-9]\{2,3\}'匹配两位到三位数字 |
\w | 匹配包括下划线的任何单词字符 "[A-Za-z0-9]"匹配任何非单词字符等价于\W |
\d | 匹配一个数字字符 [^0-9]匹配一个非数字字符 等价于\D |
\s | 空白符 \S非空白符 |
示例2:^开头
示例3:$结尾
示例4:点和星
示例5:列表
只匹配括号中的单个字符
示例6:\{n\}
匹配前面字符o的次数
示例7:\{n,m\}
匹配o2-3次
示例8:匹配/etc/fstab中不是以#开头的行
示例9:匹配/etc/passwd中以bash结尾的行
扩展正则表达式元字符(支持的工具:egrep、awk)grep -E sed -r
+ | 匹配前面子表达式一次以上 go+d god good |
? | 0次或0次以上 go?d gd god good |
() | 将括号内作为一个整体 g(oo)d good gooood |
| | 或 g(oo|la)d 将匹配good glad |
go*d可以没有o go+d至少要一个
示例1:加号
加号和星号的区别在于加号是匹配一次及以上,星号是匹配零次或多次
示例2:问号
问号匹配前面o零次或者一次
示例3:括号
括号里面的字符以整体匹配,加上加号,匹配里面字符的整数倍
示例4:|的使用
练习
区号025开头,号码与区间号可以是空格、-、没有,号码必须是5或8开头的八位数
接替过程
区号025开头:^(025)
号码与区间号可以是空格、-、没有,:[ -]?
号码必须是5或8开头的八位数:[58][0-9]{7}$
用户名@子域名.[二级域名].顶级域
用户名@:长度要求6-18位。任意大小写英文,除了数字,除了@符号和空格以外的其他任意符号字符,开头只能是_或者字母
^[A-Za-z_][^@ ]{5,17}@
子域名.[二级域名]:长度任意,符号只能包含-_·
[A-Za-z0-9\-\._]+
.顶级域名:长度在2-5,任意大小写英文
\.[A-Za-z]{2,5}$