liunx文本三剑客(grep,awk,sed),正则表达式

正则表达式

基础正则

符号 含义
^ 以…开头
$ 以…结尾
[] 表示或者,[abc] 表示a或者b或者c ,和去除特殊字符含义
* 表示前一个字符出现0次或者多次
. 表示任意一个字符
^$ 表示空行
.* 表示任意字符
[^] 表示取反

^ :以...开头
grep -n ”^p“ scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第1张图片

* : 匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
grep -n "t*“ scan_oN.txt

在这里插入图片描述

$ :以....为结尾
grep -n "p$" scan_oN.txt

在这里插入图片描述

. : 匹配任意单个字符,不能匹配空行
grep -n ".0" scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第2张图片

^$ :匹配空行
grep -n "^$" scan_oN.txt

在这里插入图片描述

.* :匹配任意字符
grep -n ".*" scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第3张图片

-v :显示不被pattern 匹配到的行,相当于[^] 反向匹配
grep -nv "^$" scan_oN.txt
不显示空行

liunx文本三剑客(grep,awk,sed),正则表达式_第4张图片

\ :转义字符
grep -n "\.$" scan_oN.txt
查询以 . 结尾的

在这里插入图片描述

[] :中括号,表示匹配中括号内的任意一个字符[abc] a或b或c
注意[]还有转义字符的作用,在中括号中的特殊字符都会被转义
grep -n "[abc]" scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第5张图片

[^] :取反的效果
grep -n "[\^abc]" scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第6张图片

[0-9]:匹配所有包含数字的行
grep -n "[0-9]" scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第7张图片

[a-z] :匹配所有包含小写字母的行
grep -n "[a-z]" scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第8张图片

[A-Z] :匹配所有包含大写字母的行
grep -n "[A-Z]" scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第9张图片

[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张图片
liunx文本三剑客(grep,awk,sed),正则表达式_第11张图片

[.] :中括号转义,匹配所有带点的行
grep -n "[.]" scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第12张图片

扩展正则

符号 含义
+ 前一个字符连续出现1次或者1次以上
| 或者
() 一个整体,sed反向引用
{} o{n,m}前一个字母o,至少连续出现n次,最多连续出现m次
前一个字母连续出现0次或者1次

| :竖杠,表示或者的意思
egrep "ftp|ssh" scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第13张图片

+ :表示匹配前字符1次字符或者前字符多次字符
egrep "p+" scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第14张图片

[0-9]+ :匹配连续的数字
egrep "[0-9]+" scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第15张图片

[a-Z]+ :匹配所有连续的字母
egrep "[a-Z]+" scan_oN.txt
liunx文本三剑客(grep,awk,sed),正则表达式_第16张图片

-o :显示匹配结果过程
egrep -o "[a-Z]+" scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第17张图片

() :被小括号括起来的表示为一个整体,在sed命令中是向后引用
egrep “i(n|t)” scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第18张图片

{} :o{n,m} o:表示o至少连续出现n次,m表示o最多连续出现m次
egrep "0{2,3}" scan_oN.txt

在这里插入图片描述

{} :o{n} o:表示o刚好连续出现了n次
egrep "0{2}" scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第19张图片

{} :o{,m}:表示o最多连续出现了m次
egrep "0{,3}" scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第20张图片

{} :o{n,}:表示o连续出现的次数小于等于n
egrep "0{2,}" scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第21张图片

? :前一个字符至少连续出现0次或者1次
egrep "T?" scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第22张图片

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张图片

-A :-An 显示符合条件行及其后n行
grep -A5 "Nmap" scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第24张图片

-B :-Bn 显示符合条件及其前n行
grep -B5 "Nmap" scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第25张图片

-C :-Cn 显示符合条件及其前后n行
grep -C5 "Nmap" scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第26张图片

-c :统计符合条件的行数
grep -c "Nmap" scan_oN.txt

在这里插入图片描述

-i :不区分大小
grep -i "nmap" scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第27张图片

-v :排除
grep -v "Namp" scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第28张图片

-o :显示匹配过程
grep -o "Nmap" scan_oN.txt

liunx文本三剑客(grep,awk,sed),正则表达式_第29张图片

-w :精准匹配
grep -w "mysql" scan_oN.txt

在这里插入图片描述

-n :显示行号
grep -n "mysql" scan_oN.txt

在这里插入图片描述

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张图片

sed -n '/21/p' scan_oN.txt
查询包含指定内容的行

liunx文本三剑客(grep,awk,sed),正则表达式_第31张图片

sed -n /21/,/80/p scan_oN.txt
范围过滤

在这里插入图片描述

sed -n '$p' scan_oN.txt
最后一行

在这里插入图片描述

删除d

sed '1d' scan_oN.txt
删除指定行

liunx文本三剑客(grep,awk,sed),正则表达式_第32张图片

sed '2,4p' scan_oN.txt
删除指定范围的

liunx文本三剑客(grep,awk,sed),正则表达式_第33张图片

sed '/ftp/d' scan_oN.txt
删除指定内容的行

liunx文本三剑客(grep,awk,sed),正则表达式_第34张图片

sed '/21/,/3306/d' scan_oN.txt
删除指定范围的行

liunx文本三剑客(grep,awk,sed),正则表达式_第35张图片

增加cai

sed '2a xiao hei zi' scan_oN.txt
a在指定行后追加
liunx文本三剑客(grep,awk,sed),正则表达式_第36张图片

sed '2i xiaoheizi' scan_oN.txt
i在指定行前插入内容

liunx文本三剑客(grep,awk,sed),正则表达式_第37张图片

sed '2c xxxxxx' scan_oN.txt
c替换指定行内容

liunx文本三剑客(grep,awk,sed),正则表达式_第38张图片

替换s

sed 's#MAC#YYY#g' scan_oN.txt
s 替换
g 全局替换
sed 默认替换第一个字符所有要加g
替换调指定内容

liunx文本三剑客(grep,awk,sed),正则表达式_第39张图片

sed -nr '6s#^.*/(.*cp).*#\1#gp'
()后向引用
liunx文本三剑客(grep,awk,sed),正则表达式_第40张图片

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张图片

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张图片

ls -l | awk -F: 'NR==2{print $2}'
-F指定分割符为:

在这里插入图片描述

ls -l | awk -F - 'NR==2{print $NF}'
取最后一列的

liunx文本三剑客(grep,awk,sed),正则表达式_第43张图片

ls -l | awk -F- -vOFS=: 'NR==2{print $1,$2,$3}'
指定输出分割符为:

在这里插入图片描述

ls -l | awk -F- "//"

你可能感兴趣的:(1024程序员节)