300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Linux三剑客:grep sed awk

Linux三剑客:grep sed awk

时间:2018-10-18 05:41:09

相关推荐

Linux三剑客:grep sed awk

通配符

[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不会做换行,而是直接输出所有

举例

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。