正则表达式
基础正则
符号 |
含义 |
^ |
以…开头 |
$ |
以…结尾 |
[] |
表示或者,[abc] 表示a或者b或者c ,和去除特殊字符含义 |
* |
表示前一个字符出现0次或者多次 |
. |
表示任意一个字符 |
^$ |
表示空行 |
.* |
表示任意字符 |
[^] |
表示取反 |
^ :以...开头
grep -n ”^p“ scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第1张图片](http://img.e-com-net.com/image/info8/cb3433f644884730bfabce2007a4f1f5.jpg)
* : 匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
grep -n "t*“ scan_oN.txt
![在这里插入图片描述](http://img.e-com-net.com/image/info8/370f8a0b90bc46c9adceea3f594e7b36.jpg)
$ :以....为结尾
grep -n "p$" scan_oN.txt
![在这里插入图片描述](http://img.e-com-net.com/image/info8/a68451e0d8f846daa5ad07353cdf805a.jpg)
. : 匹配任意单个字符,不能匹配空行
grep -n ".0" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第2张图片](http://img.e-com-net.com/image/info8/be36e9a3d3cf459899d36f25f9d3b554.jpg)
^$ :匹配空行
grep -n "^$" scan_oN.txt
![在这里插入图片描述](http://img.e-com-net.com/image/info8/2f0c345964674e3c989333ab9af1f6c4.jpg)
.* :匹配任意字符
grep -n ".*" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第3张图片](http://img.e-com-net.com/image/info8/91ce4d016bdb448087c36651ddb38441.jpg)
-v :显示不被pattern 匹配到的行,相当于[^] 反向匹配
grep -nv "^$" scan_oN.txt
不显示空行
![liunx文本三剑客(grep,awk,sed),正则表达式_第4张图片](http://img.e-com-net.com/image/info8/a3984042ca75439a87182c2d4cfa79cd.jpg)
\ :转义字符
grep -n "\.$" scan_oN.txt
查询以 . 结尾的
![在这里插入图片描述](http://img.e-com-net.com/image/info8/a44a1e8361bf43e493c5968e4295508c.jpg)
[] :中括号,表示匹配中括号内的任意一个字符[abc] a或b或c
注意[]还有转义字符的作用,在中括号中的特殊字符都会被转义
grep -n "[abc]" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第5张图片](http://img.e-com-net.com/image/info8/9903b2b58a1a4839931c9d45bed8c12a.jpg)
[^] :取反的效果
grep -n "[\^abc]" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第6张图片](http://img.e-com-net.com/image/info8/c97b373717154138b0b6f742ae540a96.jpg)
[0-9]:匹配所有包含数字的行
grep -n "[0-9]" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第7张图片](http://img.e-com-net.com/image/info8/21e082dd16bd4320aaec4b3706babb39.jpg)
[a-z] :匹配所有包含小写字母的行
grep -n "[a-z]" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第8张图片](http://img.e-com-net.com/image/info8/a1a040177f92432d8d3f0c1d9606c1a9.jpg)
[A-Z] :匹配所有包含大写字母的行
grep -n "[A-Z]" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第9张图片](http://img.e-com-net.com/image/info8/00c6ffe1cd8b47a6a1a7018daeb44328.jpg)
[a-Z0-9] 或 [a-zA-Z0-9] :匹配所有大小字母和所有数字
-i :不区分大小写
grep -n "[a-Z0-9]" scan_oN.txt
grep -n "[a-zA-Z0-9]" scan_oN.txt
grep -ni "[a-z0-9]" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第10张图片](http://img.e-com-net.com/image/info8/f77ad8afbe004878b1a9915039816218.jpg)
![liunx文本三剑客(grep,awk,sed),正则表达式_第11张图片](http://img.e-com-net.com/image/info8/bb321649f3634cbdae57fae7fef6d47a.jpg)
[.] :中括号转义,匹配所有带点的行
grep -n "[.]" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第12张图片](http://img.e-com-net.com/image/info8/94c377ded31148f6b78f24f069aaaf36.jpg)
扩展正则
符号 |
含义 |
+ |
前一个字符连续出现1次或者1次以上 |
| |
或者 |
() |
一个整体,sed反向引用 |
{} |
o{n,m}前一个字母o,至少连续出现n次,最多连续出现m次 |
? |
前一个字母连续出现0次或者1次 |
| :竖杠,表示或者的意思
egrep "ftp|ssh" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第13张图片](http://img.e-com-net.com/image/info8/79909912a114458b93c976de6619cb49.jpg)
+ :表示匹配前字符1次字符或者前字符多次字符
egrep "p+" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第14张图片](http://img.e-com-net.com/image/info8/63569dc731e8480b9c756e3e6d6d074a.jpg)
[0-9]+ :匹配连续的数字
egrep "[0-9]+" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第15张图片](http://img.e-com-net.com/image/info8/fd6e21a1ab5b4cbf853a35aeffb0a85a.jpg)
[a-Z]+ :匹配所有连续的字母
egrep "[a-Z]+" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第16张图片](http://img.e-com-net.com/image/info8/d169623f24264106a107738e68755de8.jpg)
-o :显示匹配结果过程
egrep -o "[a-Z]+" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第17张图片](http://img.e-com-net.com/image/info8/04f9129ec6a74f28972a5f1e0263fc55.jpg)
() :被小括号括起来的表示为一个整体,在sed命令中是向后引用
egrep “i(n|t)” scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第18张图片](http://img.e-com-net.com/image/info8/87de17b4180544bbb9ab104644651e4a.jpg)
{} :o{n,m} o:表示o至少连续出现n次,m表示o最多连续出现m次
egrep "0{2,3}" scan_oN.txt
![在这里插入图片描述](http://img.e-com-net.com/image/info8/96eb54cef38a460d9d54aa551ce6ab10.jpg)
{} :o{n} o:表示o刚好连续出现了n次
egrep "0{2}" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第19张图片](http://img.e-com-net.com/image/info8/30a43500c6f6408f9f5322da33656369.jpg)
{} :o{,m}:表示o最多连续出现了m次
egrep "0{,3}" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第20张图片](http://img.e-com-net.com/image/info8/e22a37a83c1e4dbfb6408803273300d6.jpg)
{} :o{n,}:表示o连续出现的次数小于等于n
egrep "0{2,}" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第21张图片](http://img.e-com-net.com/image/info8/1fa834fee4744241a4aa5b0cb8751986.jpg)
? :前一个字符至少连续出现0次或者1次
egrep "T?" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第22张图片](http://img.e-com-net.com/image/info8/5e7bdb2d1ffa4d9da5fecae59e7fac83.jpg)
liunx文本三剑客
grep的基本使用
参数 |
含义 |
-E |
== egrep 当使用扩展正则时使用 |
-A |
-An 显示符合条件行及其后n行 |
-B |
-Bn显示符合条件行及其前n行 |
-C |
-Cn显示符合条件行及其前后n行 |
-c |
-c 统计符合条件的行数 |
-w |
精准匹配 |
-o |
显示匹配过程 |
-v |
排除符合条件的行 |
-i |
不区分大小写 |
-n |
显示行号 |
-E :== egrep 当使用扩展正则时使用
grep -E "0{2}" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第23张图片](http://img.e-com-net.com/image/info8/5ee03761becd47c2aac0831e6e00c8b6.jpg)
-A :-An 显示符合条件行及其后n行
grep -A5 "Nmap" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第24张图片](http://img.e-com-net.com/image/info8/10401fd015fa48e994f34e866d4afbe9.jpg)
-B :-Bn 显示符合条件及其前n行
grep -B5 "Nmap" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第25张图片](http://img.e-com-net.com/image/info8/db6e293af04447f48aabbab066b6015a.jpg)
-C :-Cn 显示符合条件及其前后n行
grep -C5 "Nmap" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第26张图片](http://img.e-com-net.com/image/info8/ee71a9680ab74731905c0967a68b96c3.jpg)
-c :统计符合条件的行数
grep -c "Nmap" scan_oN.txt
![在这里插入图片描述](http://img.e-com-net.com/image/info8/a46ae80ad9374581872e499ceb277e42.jpg)
-i :不区分大小
grep -i "nmap" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第27张图片](http://img.e-com-net.com/image/info8/1912ba481368499ebc0e893e2aee6002.jpg)
-v :排除
grep -v "Namp" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第28张图片](http://img.e-com-net.com/image/info8/53a323fd052c411a8879cbebe64a7fb7.jpg)
-o :显示匹配过程
grep -o "Nmap" scan_oN.txt
![liunx文本三剑客(grep,awk,sed),正则表达式_第29张图片](http://img.e-com-net.com/image/info8/e4f1d246799741319dbe67ed7c1fb0df.jpg)
-w :精准匹配
grep -w "mysql" scan_oN.txt
![在这里插入图片描述](http://img.e-com-net.com/image/info8/5468a558b8a94e5d8a77aa314d047ba9.jpg)
-n :显示行号
grep -n "mysql" scan_oN.txt
![在这里插入图片描述](http://img.e-com-net.com/image/info8/ac7e7231ac984f65b3babb237200502c.jpg)
sed
查找p
参数 |
说明 |
np |
n表示查找并输出显示的行数 |
/0/p |
表示查找并输出显示符合0的行 |
/0/,/9/p |
表示查找并输出显示符合0的行 |
/[0-9]/p |
支持正则表达式 |
-r |
支持扩展正则表达式 |
-n |
只输出符合条件的行 |
sed -n '3p' scan_oN.txt
查询指定行
![liunx文本三剑客(grep,awk,sed),正则表达式_第30张图片](http://img.e-com-net.com/image/info8/d32a3b358d6a4221a15a9e091a72fd9d.jpg)
sed -n '/21/p' scan_oN.txt
查询包含指定内容的行
![liunx文本三剑客(grep,awk,sed),正则表达式_第31张图片](http://img.e-com-net.com/image/info8/10af79c25c2e46c9936fbaab036e8e40.jpg)
sed -n /21/,/80/p scan_oN.txt
范围过滤
![在这里插入图片描述](http://img.e-com-net.com/image/info8/0f3a636a561b40a8b65cf37a6a18c248.jpg)
sed -n '$p' scan_oN.txt
最后一行
![在这里插入图片描述](http://img.e-com-net.com/image/info8/bdbf2d83b4ea42968fb0be5ea08e07b2.jpg)
删除d
sed '1d' scan_oN.txt
删除指定行
![liunx文本三剑客(grep,awk,sed),正则表达式_第32张图片](http://img.e-com-net.com/image/info8/969c4ebe2a974524a36f499230edd698.jpg)
sed '2,4p' scan_oN.txt
删除指定范围的
![liunx文本三剑客(grep,awk,sed),正则表达式_第33张图片](http://img.e-com-net.com/image/info8/faf944464b0e4c5cbb06397587cd34e3.jpg)
sed '/ftp/d' scan_oN.txt
删除指定内容的行
![liunx文本三剑客(grep,awk,sed),正则表达式_第34张图片](http://img.e-com-net.com/image/info8/3871ec6f6cbb400280b5efe9f8c031f9.jpg)
sed '/21/,/3306/d' scan_oN.txt
删除指定范围的行
![liunx文本三剑客(grep,awk,sed),正则表达式_第35张图片](http://img.e-com-net.com/image/info8/765ddf8f7d664fcfb7d94095fecd4c36.jpg)
增加cai
sed '2a xiao hei zi' scan_oN.txt
a在指定行后追加
![liunx文本三剑客(grep,awk,sed),正则表达式_第36张图片](http://img.e-com-net.com/image/info8/6c7db4550cdf4cb9a9d5b49bbf2ae825.jpg)
sed '2i xiaoheizi' scan_oN.txt
i在指定行前插入内容
![liunx文本三剑客(grep,awk,sed),正则表达式_第37张图片](http://img.e-com-net.com/image/info8/463aa0f419534f929517db003bca6e29.jpg)
sed '2c xxxxxx' scan_oN.txt
c替换指定行内容
![liunx文本三剑客(grep,awk,sed),正则表达式_第38张图片](http://img.e-com-net.com/image/info8/b3845c78bbaf4183bc358131f509b756.jpg)
替换s
sed 's#MAC#YYY#g' scan_oN.txt
s 替换
g 全局替换
sed 默认替换第一个字符所有要加g
替换调指定内容
![liunx文本三剑客(grep,awk,sed),正则表达式_第39张图片](http://img.e-com-net.com/image/info8/7ea1dc75150c480492c4447e01ae2410.jpg)
sed -nr '6s#^.*/(.*cp).*#\1#gp'
()后向引用
![liunx文本三剑客(grep,awk,sed),正则表达式_第40张图片](http://img.e-com-net.com/image/info8/14913646663341b38f88a008c81f7f68.jpg)
ip a s eth0 | sed -n '3p' | sed -nr 's#.*t (.*)/.*#\1#gp'
ip a s eth0 | sed -nr '3s#.*t (.*)/.*#\1#gp'
去ip地址案例
![liunx文本三剑客(grep,awk,sed),正则表达式_第41张图片](http://img.e-com-net.com/image/info8/60cbd03042bc4bcb9a76d8f29eb49044.jpg)
awk
命令 |
参数 |
NR |
NR行,NR==3 表示第三行 |
NF |
每行有多少列,$NF 表示最后一列 |
FS |
-F分隔符,-F : 表示用:做分割符 |
OFS |
OFS输出字段分隔符,-vOFS=:表示用:做分割符输出 |
ls -l | awk NR==2{print $6}
取第二行的第6列,默认分割符为空格,连续的空格,和制表位(TAB)
![liunx文本三剑客(grep,awk,sed),正则表达式_第42张图片](http://img.e-com-net.com/image/info8/8d554c9cf62143fba7a6643e4c014253.jpg)
ls -l | awk -F: 'NR==2{print $2}'
-F指定分割符为:
![在这里插入图片描述](http://img.e-com-net.com/image/info8/c6f763c8e4c64b3ea59b11110d1974d0.jpg)
ls -l | awk -F - 'NR==2{print $NF}'
取最后一列的
![liunx文本三剑客(grep,awk,sed),正则表达式_第43张图片](http://img.e-com-net.com/image/info8/b0f1727972d7470b80e11796b63c4861.jpg)
ls -l | awk -F- -vOFS=: 'NR==2{print $1,$2,$3}'
指定输出分割符为:
![在这里插入图片描述](http://img.e-com-net.com/image/info8/9eaf833f0d0f4feeb5fed81d9b43cd52.jpg)
ls -l | awk -F- "//"