运维开发网

Linux三剑客基础(grep、awk、sed)

运维开发网 https://www.qedev.com 2020-11-25 12:14 出处:51CTO 作者:贫僧加菲
grep:从文本文件中筛选匹配的行及数据用法:grep选项匹配模式查找的文件选项:-v显示不匹配的行,即显示除匹配行以外的数据或行-n显示匹配行的及行号-i不区分大小写-c统计匹配的行数-e支持使用扩展的egrep命令-w只匹配过滤的单词-o只输出匹配的内容实例:1、过滤不包含welcome的字符串grep-v"welcome"file.txt2、输出包含welcome字符串额

grep:从文本文件中筛选匹配的行及数据

用法:grep 选项 匹配模式 查找的文件

选项:

-v 显示不匹配的行,即显示除匹配行以外的数据或行

-n 显示匹配行的及行号

-i 不区分大小写

-c 统计匹配的行数

-e 支持使用扩展的egrep命令

-w 只匹配过滤的单词

-o 只输出匹配的内容


实例:

1、过滤不包含welcome的字符串

grep -v "welcome" file.txt

2、输出包含welcome字符串额行,并显示行号

grep -n "welcome" file.txt

3、输出所有行,并显示所有行的行号

grep -n "." file.txt

注意:这里的"."表示匹配任意单个字符

4、忽略大小写过滤匹配的行

grep -in "welcome" file.txt

5、过滤同时包含welcome和name的字符串行

grep -Ei "welcome|name" file.txt

6、计算匹配的字符串的行数

grep -c "name" file.txt

7、 只显示匹配的字符串

grep -oi "welcome" file.txt

8、输出/etc/passwd文件中是/bin/bash的用户

grep -wi "/bin/bash" /etc/passwd


sed:字符流编辑器,可以对文件实现快速增删查、字符串过滤以及取出指定行。

用法:sed 选项 sed内置命令 输入文件

选项:

-n:取消默认的sed输出,常与sed内置命令的p连用。

-i:直接修改文件内容,并不输出到终端,如果不使用该选项,则只是修改内存中的数据,对磁盘文件上的内容不影响

sed内置命令:

a:表示追加文本,在指定的行后添加一行或者多行文本

d:表示匹配行的文本

i:表示插入文本,在指定的行前添加一行或多行文本

p:打印匹配行的内容

s:实现替换功能

g:表示全局替换标志,即替换文件中所有匹配的字符串

N:不会清空模式空间的内容,并从输入文件中读取下一行数据,追加到模式空间中,两行数据以\n连接

E:支持扩展grep,即egrep


实例:

1、在第二行追加一行文本

sed -i '2a she is beautiful girl' file.txt

注意:-i选项,如果不加,则she is beautiful girl无法加入到文本中

2、在第二行前面追加一行文本

sed -i '2i he is my friend' file.txt

3、在第二行后面追加多行文本

sed -i '2a my friend'\''s name is awei\nhe is a diaosi' file.txt

4、删除多行文本

sed -i '2,9d' file.txt

删除第二行到第九行文本

5、全局替换文本内容

sed -i 's#diaosi#zhuangbi#g' file.txt

6、打印出第二行文本

sed -n '2p' file.txt

注意:不加-n选项,则会将默认输出文件多有的文本行,而指定的行会出现2次


awk:不仅仅是一个命令,还是一种编程语言,可以用来处理数据和生成报告

选项:

-F:指定字段分隔符

-v:定义或修改一个awk内部变量

操作命令:

print:此命令必须在{}里面使用

内置命令:

NR:表示行号

NF:

OFS:自定义分隔符

注意在awk中‘==’表示等于

实例:

1、显示文件中的第5行

awk 'NR==5' file

2、显示第2行到第5行,并打印行号

awk 'NR==2,NR==5{print NR,$0}' file.txt

注意:{}里面的NR表示行号,$0表示一整行内容。

3、显示文件的第2列和最后一列

awk '{print $2,$NF}' file.txt

注意:$NF表示最后一列

4、将文件中的/sbin/nologin替换为/bin/bash(awk函数功能实现)

awk '{gsub("/sbin/nologin","/bin/bash",$0);print $0}' /etc/passwd

注意:gsub是awk的查找替换功能函数,使用格式:

awk '{gsub("替换对象","要替换的内容",替换的位置)}'

5、取对应网卡的ip地址

ifconfig ens33|awk -F "inet|netmask" 'NR==2{print $2}'

ifconfig ens33|awk -F "[ :]+" 'NR==2{print $3}'

注意:上条命令$3不是固定的,具体看ifconfig出的内容

6、awk数组的概念

实例:统计域名的访问次数

[[email protected] ~]# awk -F "/" '{unit[$3]++;print $3,unit[$3]}' doamin

www.xiaodong.com 1

www.xiao.com 1

www.xiaodong.com 2

www.xia.org 1

www.xia.org 2

map.xiaodong.com 1

pop3.xiaodong.cm 1

www.xiaodong.com 3

思路:

1、指定分隔符,取出域名

2、创建一个数组unit,将每一个域名存放到这个unit组中

3、通过对这个数组的i++(相当于加法运算)重复匹配运算,得出每个域名的次数

4、然后将数组统计出的次数随着print显示在对应域名后面(即print $3,unit[$3])

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号