Linux三剑客
原创
©著作权归作者所有:来自51CTO博客作者codelinghu的原创作品,请联系作者获取转载授权,否则将追究法律责任
Linux三剑客
文章目录
一、正则表达式
由特殊字符和文本字符组成编写模式。主要分类:
- 元字符有:^$.[]*
- 作用:1、匹配字符;2、匹配字符次数;3、位置锚定
- 元字符有:(){}?+| (包括BRE)
- 必须使用
grep -E
才能生效
1.2正则表达意义:
- 处理大量的字符串 (提取关键字信息、文件信息、网站信息)
- 处理文本(替换功能)
- 正则表达式必须使用Linux三剑客去操作它。
二、Linux三剑客grep
-
grep
:文本搜索、过滤工具
2.1、grep练习
##首先连接文件passwd并打印输出到 pwd.txt文件中
[root@1-VM00013 ~]# cat /etc/passwd > ./pwd.txt
##开始搜索过滤,不区分大小写,查找pwd.txt文件中含有root字样的字符
[root@1-VM00013 ~]# grep -i "root" pwd.txt
root:x:0:0:root:/root
operator:x:11:0:operator:/root:/sbin/nologin
dockerroot:x:988:98
##把行号显示出来,查找pwd.txt文件中含有root字样的字符
[root@1-VM00013 ~]# grep -i -n "root" pwd.txt
1:root:x:0:0:root:
10:operator:x:11:0:operator:/root:/sbin/nologin
42:dockerroot:x:
##统计pwd.txt文本中,有多少行root有关的字符
[root@1-VM00013 ~]# grep -i "root" ./pwd.txt -c
3
[root@1-VM0001
##找出所有的非空行
思路是先找出所有的空行,然后结果取反
[root@1-VM00013 data]# cat luffy.txt
I am linghu
I teach linux
i like python
my name is linghu
[root@1-VM00013data]# grep '^$' luffy.txt
##查看空行的行号:
[root@1-VM00013 data]# grep '^$' luffy.txt -n
2:
4:
6:
8:
##把结果取反
[root@1-VM00013 data]# grep '^$' luffy.txt -n -v
1:I am linghu
3:I teach linux
5:i like python
7:my name is linghu
现在在文本中加入注释行,我们要排除注释行:
[root@1-VM00013 data]# grep '^$' luffy.txt -v | grep '^#' -v
2.2、找出所有以m开头的行
[root@1-VM00013 data]# grep -i -n '^m' luffy.txt
7:my name is linghu
2.3、输出所有以m开头的行
[root@1-VM00013 data]# grep -i -n '^m' luffy.txt |grep -i -n '.*
1:7:maybe
2:9:my boy is you
3:11:my name is linghu
2.4输出所有以i开头的行
[root@1-VM00013 data]# grep -i -n '^i' luffy.txt |grep -i -n '.*
1:1:I am linghu
2:3:I teach linux
3:5:i like python
2.5找出所有允许登录的用户,解释器是/bin/bash的行
[root@1-VM00013 data]# cat /etc/passwd > ./pwd.txt
[root@1-VM00013 data]# grep -n "/bin/bash$" pwd.txt
1:root:x:0:0:root:/root:/bin/bash
41:zshield:x:1000:1000:zshield:/home/zshield:/bin/bash
44:testlinghu:x:94619:94619::/home/testlinghu:/bin/bash
##只输出匹配的内容
[root@1-VM00013 data]# grep -n "/bin/bash$" pwd.txt -o
1:/bin/bash
41:/bin/bash
44:/bin/bash
##找出s匹配的内容
[root@1-VM00013 data]# grep ".s" luffy.txt
my boy is you
my name is linghu
#zhushi bu huai bei du qu
[root@1-VM00013 data]#
-
sed
:文本编辑工具 -
awk
:文本报告生成器
三、sed与正则表达式
sed对文件实现快速的增删改查,模式匹配。
3.1、输出文件第二行、第三行
[root@1-VM00013 data]# sed "2,3p" luffy.txt -n
3.2、过滤出含有“Linux”字样的文本
[root@1-VM00013 data]# sed "/linux/p" luffy.txt -n
3.3、删除含有game的行
[root@1-VM00013 data]# sed "/game/d" luffy.txt -i
3.4、全局替换,将my换成i
[root@1-VM00013 data]# sed "s/My/I/g" luffy.txt -i
四、sed配合正则表达式企业案例
4.1、取出linux的ip地址【去头去尾】
上图,通过三个管道符对命令进行过滤。
五、Linux三剑客awk
awk
适合处理匹配到的文本。
awk
更像是一门编程语言,支持条件判断、数组、循环等功能。
一、
用awk '{printf $0}' change.txt可以打印chage.txt所有的数据
二、
用awk '{printf $1$2}' change.txt可以打印第一列和第二列的数据(可以加逗号)
用awk '{printf "第一列:"$1,"第二列:"$2,"第三列:"$3}'
5.1、显示文件第五行
5.2、输出第一行到第三行
5.2、利用awk取出ip地址信息
5.3、awk做分隔
首先看一下测试文件pwd.txt里的用户:
我们来做一个分隔,分割出第一列用户信息:
5.4、awk变量
一、自定义变量
[root@1-VM00013 data]# awk -v myname="令狐" 'BEGIN{print "我的名字是:",myname}'
二、变量赋值
[root@1-VM00013 data]# myname="令狐荣豪"
[root@1-VM00013 data]# echo $myname
令狐荣豪
[root@1-VM00013 data]# awk -v awk_name=$myname 'BEGIN{print awk_name}'
5.5、awk模式pattern
六、at与mailx命令
6.1、linux定时任务
[root@1-VM00013 ~]# at now+1min
at> touch /tmp/linghu.txt
at> <EOT>
job 1 at Fri Apr 29 14:21:00 2022