通配符
[a-z], [A-Z], [0-9], [a-z0-9]
[[:upper:]]:所有大写字母
[[:lower:]]:所有小写字母
[[:alpha:]]:所有字母
[[:digit:]]:所有数字
[[:alnum:]]:所有的字母和数字
[[:space:]]:所有空白字符
[[:punct:]]:所有标点符号
grep
语法
grep [选项] 过滤条件 文件名
选项:
-n------------显示行号
-v-------------取反,意思是匹配除过匹配内容之外的内容
-i--------------忽略大小写
-E-------------开启扩展正则
-o-------------只显示匹配到的内容
举例
1.显示/etc/passwd文件下的两位数或三位数
[root@group7 home]# grep -E '\<[0-9]{2,3}\>' /etc/passwd
2.找出/etc/passwd下,以P或p开头的内容
写法一:[root@group7 home]# grep -i -E '^(P|p)' /etc/passwdpolkitd:x:999:998:User for polkitd:/:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologin写法二:[root@group7 home]# grep -i '^[P|p]' /etc/passwdpolkitd:x:999:998:User for polkitd:/:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologin
3.找出ifconfig命令的ip地址
[root@group7 home]# ifconfig ens33 | grep 'inet .* netmask' |grep -o '\([0-9]\{1,3\}.\)\{3\}.[0-9]\{1,3\}'
4.echo 输出一条绝对路径,用grep找出其绝对路径
[root@group7 home]# echo /var/log/dmesg | grep -E -o '[^/].*/?$'var/log/dmesg
sed
语法
sed [选项] 地址定界 编辑的内容 文件名
选项:
-n-----------不输出模式空间的内容到屏幕,常与-p一起使用
-e------------多次编辑
-i-------------将编辑的内容修改到文件
-r-------------支持扩展正则
内置命令
用于对文件进行操作,如增删改查
匹配范围
举例
[root@nebulalinux03 ~]# cat sed.txtnorthwest NW Charles Main 4.0 .99 3 35western WE Sharon Gray 8.3 .97 5 23southwest SW Lewis Dalsass 4.7 .8 2 19southern SO Suan Chin 5.1 .96 4 15southeast SE Patricia Hemenway 4.0 .7 4 16eastern EA TB Savage 7.7 .84 5 22northeast NE AM Main Jr. 5.1 .96 3 13north NO Margot Weber 3.4 .87 5 8central CT Ann Stephens 2.7 .94 5 14
1.输出文件第二行和第三行内容
[root@group7 home]# sed -n '2,3p' sed.txtwestern WE Sharon Gray8.3 .97 5 23southwest SW Lewis Dalsass 4.7 .8 2 19
2.过滤出含有west的行
[root@group7 home]# sed -n '/west/p' sed.txtnorthwest NW Charles Main4.0 .99 3 35western WE Sharon Gray8.3 .97 5 23southwest SW Lewis Dalsass 4.7 .8 2 19
3.删除含有north的行
[root@group7 home]# sed '/north/d' sed.txtwestern WE Sharon Gray8.3 .97 5 23southwest SW Lewis Dalsass 4.7 .8 2 19southern SO Suan Chin5.1 .96 4 15southeast SE Patricia Hemenway 4.0 .7 4 16eastern EA TBSavage 7.7 .84 5 22central CT AnnStephens 2.7 .94 5 14
4.将文件中的central替换成earth
[root@group7 home]# sed 's/central/earth/g' sed.txtnorthwest NW Charles Main4.0 .99 3 35western WE Sharon Gray8.3 .97 5 23southwest SW Lewis Dalsass 4.7 .8 2 19southern SO Suan Chin5.1 .96 4 15southeast SE Patricia Hemenway 4.0 .7 4 16eastern EA TBSavage 7.7 .84 5 22northeast NE AMMain Jr. 5.1 .96 3 13northNO Margot Weber3.4 .87 5 8earth CT AnnStephens 2.7 .94 5 14
5.在southeast行后添加hello
[root@group7 home]# sed '/southeast/a hello' sed.txtnorthwest NW Charles Main4.0 .99 3 35western WE Sharon Gray8.3 .97 5 23southwest SW Lewis Dalsass 4.7 .8 2 19southern SO Suan Chin5.1 .96 4 15southeast SE Patricia Hemenway 4.0 .7 4 16helloeastern EA TBSavage 7.7 .84 5 22northeast NE AMMain Jr. 5.1 .96 3 13northNO Margot Weber3.4 .87 5 8central CT AnnStephens 2.7 .94 5 14
6.在southeast行前添加hello
[root@group7 home]# sed '/southeast/i hello' sed.txtnorthwest NW Charles Main4.0 .99 3 35western WE Sharon Gray8.3 .97 5 23southwest SW Lewis Dalsass 4.7 .8 2 19southern SO Suan Chin5.1 .96 4 15hellosoutheast SE Patricia Hemenway 4.0 .7 4 16eastern EA TBSavage 7.7 .84 5 22northeast NE AMMain Jr. 5.1 .96 3 13northNO Margot Weber3.4 .87 5 8central CT AnnStephens 2.7 .94 5 14
7.使用sed过滤出ifconfig的ip
写法一:[root@group7 home]# ifconfig ens33 | sed -n '2p' | sed -rn 's#.*inet(.*)netmask.*#\1#p'192.168.75.130写法二:[root@group7 home]# ifconfig ens33 | sed -n '2p' | sed 's/.*inet //' | sed 's/netmask.*//'192.168.75.130
sed高阶用法
h:把模式空间中的内容覆盖至保持空间中;
H:把模式空间中的内容追加至保持空间中;
g:把保持空间中的内容覆盖至模式空间中;
G:把保持空间中的内容追加至模式空间中;
x:把模式空间中的内容与保持空间中的内容互换;
n:覆盖读取匹配到的行的下一行至模式空间中;
N:追加读取匹配到的行的下一行至模式空间中;
d:删除模式空间中的行;
D:删除多行模式空间中的所有行;
示例:
sed -n 'n;p' FILE:显示偶数行;
sed '1!G;h;$!d' FILE:逆序显示文件的内容;1!G:第1行不执行“G”命令,从第2行开始执行。$!d:最后一 行不删除(保留最后1行)
sed ’$!d' FILE:取出最后一行;
sed '$!N;$!D' FILE:取出文件后两行;
sed '/^$/d;G' FILE:删除原有的所有空白行,而后为所有的非空白行后添加一个空白行; sed 'n;d' FILE:显示奇数行;
sed 'G' FILE:在原有的每行后方添加一个空白行;
举例
1.显示/etc/passwd文件中的偶数行,并显示行号
[root@group7 home]# sed -n 'n;=;p' /etc/passwd
2.为文件/etc/passwd文件每行开头添加#
[root@group7 home]# sed '1,$s/\(.*\)/#\1/g' /etc/passwd
awk
语法
awk 参数 模式 ‘{动作}’ 文件
awk内置变量
$0 -----------表示完整的输入记录
$n-------------指定分隔符后,当前的第几个字段
FS-------------字段分隔符,默认为空格
NF--------------分割后,当前行有多少个字段
NR--------------当前行数
FNR------------输入的文件的行数
FS----------------输入分割符,默认是空格
OFS--------------输出分隔符
RS----------------输入换行符,指定后,按照指定的符号进行换行输出
ORS-------------输出分隔符,指定后,按照指定的符号换行
awk必须外层 单引号,内层双引号
awk参数
-F ------------指定分隔符,默认为空格
-v<变量=值>--------------在开始执行前为变量值
-f--------------从脚本文件中读取awk命令
举例
vim sed.txtnorthwest NW Charles Main4.0 .99 3 35western WE Sharon Gray8.3 .97 5 23southwest SW Lewis Dalsass 4.7 .8 2 19southern SO Suan Chin5.1 .96 4 15southeast SE Patricia Hemenway 4.0 .7 4 16eastern EA TBSavage 7.7 .84 5 22northeast NE AMMain Jr. 5.1 .96 3 13northNO Margot Weber3.4 .87 5 8central CT AnnStephens 2.7 .94 5 14~
1.显示文件的第五行
[root@group7 home]# awk 'NR==5' sed.txtsoutheast SE Patricia Hemenway 4.0 .7 4 16
2.显示文件所有内容
[root@group7 home]# awk '{print $0}' sed.txt
3.显示文件2到5行内容,并且添加行号
[root@group7 home]# awk 'NR==2,NR==5 {print NR,$0}' sed.txt2 western WE Sharon Gray8.3 .97 5 233 southwest SW Lewis Dalsass 4.7 .8 2 194 southern SO Suan Chin5.1 .96 4 155 southeast SE Patricia Hemenway 4.0 .7 4 16
4.显示文件的第一列,倒数第二列和最后一列
[root@group7 home]# awk '{print $1,$(NF-1),$NF}' sed.txtnorthwest 3 35western 5 23southwest 2 19southern 4 15southeast 4 16eastern 5 22northeast 3 13north 5 8central 5 14
5.用awk取出ip地址信息
[root@group7 home]# ifconfig ens33 | awk 'NR==2' | awk '{print $2}'192.168.75.130
6.取出/etc/passwd文件下的用户名和最后的名称,并且在中间加@符号
写法一:[root@group7 home]# awk -F: -v OFS="#" '{print $1,$NF}' /etc/passwd写法二:[root@group7 home]# awk -F: '{print $1"#"$NF}' /etc/passwd
7.显示文件/etc/passwd和sed.txt文件各自的行号
[root@group7 home]# awk '{print FNR,$0}' /etc/passwd sed.txt
8.在文件sed.txt文件中,每行添加一个#再输出
[root@group7 home]# awk -v ORS="###\n" '{print NR,$0}' sed.txt
awk格式化输出
1.使用awk打印文件前四行内容
[root@group7 home]# awk 'NR<5{print $0}' sed.txtnorthwest NW Charles Main4.0 .99 3 35western WE Sharon Gray8.3 .97 5 23southwest SW Lewis Dalsass 4.7 .8 2 19southern SO Suan Chin5.1 .96 4 15
2.打印userinfo.txt文件中区号为916的人的名字
[root@group7 home]# cat userinfo.txtMike Harrington:[510] 548-1278:250:100:175Christian Dobbins:[408] 538-2358:155:90:201Susan Dalsass:[206] 654-6279:250:60:50Archie McNichol:[206] 548-1348:250:100:175Jody Savage:[206] 548-1278:15:188:150Guy Quigley:[916] 343-6410:250:100:175Dan Savage:[406] 298-7744:450:300:275Nancy McNeil:[206] 548-1278:250:80:75John Goldenrod:[916] 348-4278:250:100:175Chet Main:[510] 548-5258:50:95:135Tom Savage:[408] 926-3456:250:168:200Elizabeth Stachelin:[916] 440-1763:175:75:300[root@group7 home]# awk -F"[ :]" '$3~/916/{print $1}' userinfo.txtGuyJohnElizabeth
print和printf的区别
printf不会做换行,而是直接输出所有
举例