Linux三剑客
正则表达式 正则表达式(regular expression)?
匹配有规律的东西:手机号、身份证号、匹配日志;
使用一些符号表达一些重复出现、大小写、开头/结尾含义;
应用场景
Linux三剑客使用,开发语言;
过滤有规律的内容,尤其是日志;
正则注意事项
所有符号为英文符号;
学习正则,通过grep命令学习,grep加上单引号;
给grep、egrep加上颜色alias grep=’grep --color=auto’alias egrep=’egrep --color=auto’;
注意系统的字符集:en_US.UTF-8,如出现问题修改字符集为C export LANG=C;
配合grep -o(只显示匹配的内容)参数学习
正则符号
基础正则:
^ 以……开头的行 例:grep ‘^og’my.txt 从my.txt中找以og开头的行;$ 以……结尾的行 例:grep ‘og$’my.txt 从my.txt中找以og结尾的行;^$ 空行 例:grep -nv ‘^$’my.txt 排除空行. 任意一个字符 例:grep ‘.’my.txt 显示除空行外的内容\ 转义字符 例:grep ‘\.$’my.txt 匹配以.结尾的的行
转义字符序列:\n 回车换行;\t tab键
* 前一个字符连续出现0次或0次以上 例:grep ‘0*’my.txt,包括为空的内容.* 所有内容 ;正则表达式的贪婪性:.*表示所有或*连续出现的时候,会尽可能贪婪的匹配更多,[] [asd] 一次匹配任意一个字符(a或s或d) 例:grep ‘[asd]’my.txt
[a-z] [A-Z] [0-9] [a-zA-z]==[a-Z]== -i [a-z]
[^abc] 匹配除abc以外的内容
扩展正则:
+ 前一个字符连续出现1次或1次以上,例:egrep -o ‘[0-9]+’my.txt,匹配数字| 或者;例:egrep ‘[my|you]+’my.txt,匹配my或you的数字() 被括起来的内容,表示一个整体(字符);反向引用sed
例:egrep ‘wom(a|e)n’my.txt ==egrep ‘woman|women’my.txt
{} 连续出现 o{n,m} 前一个字母o至少连续了n次,至多连续出现了m次
o{n} 前一个字母o连续了n次
o{n,} 前一个字母o至少连续出现了n次,>=n
o{,n} 前一个字母o至多连续出现了n次,<=n
? 连续出现,前一个字符出现0次或1次
例:egrep ‘go?d’my.txt == egrep ‘god|gd’my.txt
三剑客特点和应用场景三剑客grep
-i 忽略大小写
-E 启用POSIX扩展正则表达式
-P 启用perl正则
-o 只输出正则表达式匹配的内容
-w 整字匹配
-v 不匹配的
-n 输出行号
-A after,显示匹配内容的下5行
-B before,显示匹配内容的前5行
-C contxt,显示匹配内容的前后5行
-c 统计出现了多少行,类似于wc -l
三剑客sed功能Sed核心应用
sed -n ‘4,$p’my.txt 找第4行到最后一行
sed -nr ‘/^$|*/!p’my.txt 遇到空行和*不显示
echo 123456 |sed -r ‘s#(.*)#<\1>#g’输出<123456>
先保护再使用(.*)表示所有,<\1>表示在第一个括号内容上加<>
三剑客awk
1、
取行取列
-F 指定分隔符,指定每一列结束标记(默认为空格、连续空格、tab键)
$ 取出某一列, 如:awk ‘{print $5,$9}’| column -t 打印第5、9列对齐显示
$0 整行的内容
$NF 最后一列
awk内置变量awk模式awk正则特殊模式BEGIN{}和END{}统计方法
awk ‘/^$/{i++}END{print i}’/etc/log 统计空行
seq 100 |awq ‘{sum=sum+$1}END{print sum}’求1加到100的和
awk数组