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数组的概念
实例:统计域名的访问次数
[root@lab-235 ~]# 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])