本总结目的把三剑客工具整理到一篇文档中,方便学习、对比与记忆。
文章尽可能做到全面、详尽,不足之处,可联系我更正。
通配符
首先来了解下通配符与正则表达式的区别。
通配符:可以简单理解为键盘上除了字母和数字之前的特殊符号。
正则表达式:为处理大量文本/字符串而定义的一套规则和方法,以行为单位处理
1 | 简单理解为键盘上除了字母和数字之外的特殊符号,称为通配符 |
接下来详细说下上面特殊符号的基本用法
*(星号)
1
2
3
4
5
6
7ls -l *.log *.txt 查找后缀为log和txt的文件
ls -l stu* 查找以stu开头的文件
cat stu* 查看stu开头文件的内容
ls -l stu*.txt 查看stu开头并且以txt结尾{} (花括号)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36[root@oldboy202 20170118]# echo {1..5}
1 2 3 4 5
[root@oldboy202 20170118]# echo {5..1}
5 4 3 2 1
[root@oldboy202 20170118]# echo {1..5} {a..z}
1 2 3 4 5 a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@oldboy202 20170118]# echo A{B,C,D}
AB AC AD
[root@oldboy202 20170118]# echo 2{2,3,4}
22 23 24
[root@oldboy202 20170118]# echo {1,3,5}
1 3 5
echo stu{0..5} 工作中常用
示例1:创建文件 stu01.txt 到stu05.txt
[root@oldboy202 ~]# touch stu{01..5}.txt
[root@oldboy202 ~]# ls stu*.txt
stu01.txt stu02.txt stu03.txt stu04.txt stu05.txt
示例2:使用花括号进行备份
公式1: echo A{B,C} 意思是结果粘在一起
AB AC
公式2: echo A{,C}
A AC
使用花括号备份
cp oldboy.txt{,.bak}
这条命令就等于执行 cp oldboy.txt oldboy.txt.bak
聊聊单引号、双引号和不加引号的区别
‘’
“”
不加引号
1 | 单引号:通俗理解吃啥吐啥 |
正则表达式
什么是正则表达式?
为处理大量文本/字符串而定义的一套规则和方法(以行为单位处理)称为正则表达式,英文简称RE。
正则表达式与通配符的区别?
正则表达式是在文件中查找内容,而通配符一般是查找匹配文件
egrep/grep技巧
让查找的内容显示颜色
方式一:命令上添加–color=auto
如:grep –color=auto 3306 /etc/services
方式2:定义环境变量
1 | alias egrep='egrep --color=auto' |
正则表达式分类
- 基本正则表达式(BRE,basic regular expression)
- 高级功能:扩展正则表达式(ERE,extended regular expression)
基本正则表达式
测试环境准备
cat oldboy.txt
1 | I am oldboy teacher! |
1 | ^ 尖角号 找以什么开头的行 |
PS:cat -A oldboy.txt 查看文件空行,空格以$显示
1 | . (点) 这个正则表达式,一次可以找到任意1个字符 |
1 | \ 撬棍,转义 |
1 | 0* 表示连续出现多次的时候,就会把 000 00000都取出来。 |
1 | .* 匹配文本*前面任意字符的所有内容 |
1 | 练习: |
1 | 查找模糊字符串? |
扩展正则表达式
1 | 命令:egrep 或grep -E |
注:egrep 和 sed -r 支持扩展正则,而awk默认支持正则,无需加参数
egrep/sed/awk三剑客-实例用法
1. 利用sed取出eth0的IP地址
步骤: 第一步:定位;第二部:取内容
1 | 方法1:(掐头去尾法) |
1 | 方法2:(精简-掐头去尾法) |
反向引用-预备知识:保留谁就括谁
[root@oldboy202 ~]# echo 123456 |sed -r ‘s#..(..)..#\1#g’
34
[root@oldboyedu37-nb 20170118]# echo 123456|sed -r ‘s#.(.).(.)..#\1 \2#g’
2 4
[root@oldboyedu37-nb 20170118]# echo 123456|sed -r ‘s#.(.).(.)..#\2 \1 \2 \2 \2 #g’
4 2 4 4 4
[root@oldboy202 ~]# echo 123456|sed -r ‘s#.(…).#\1#g’
2346注:
1.前面有多少个字符,就需要写几个点
2.后面的\1是指前面括号里边的内容
1 | 方法3:反向引用-取出IP地址 |
1 | 方法4:对某一行字符串进行替换 |
1 | egrep方法5: |
SED文件内容替换
1 | sed -i.bak 's#oldboy#oldgirl#g' oldboy.txt |
SED/GREP使用正则提取/ETC/HOSTS权限
1 | 方法1: |
sed使用
1 | ## 查找以f或m结尾的行 |
EGREP/AWK取消某个文件的空行
1 | 方法1: |
EGREP/AWK 取出文本前两列
1 | [root@oldboy202 ~]# cat ett.txt |egrep "ol+dbo+y" |
SED与AWK提取文件权限
1 | ##sed提取/etc/hosts权限 |
1 | sed 使用-n参数来过滤出某行 |
AWK提取IP地址
1 | [root@oldboy202 ~]# ifconfig eth0|awk 'NR==2'|awk -F "[ :]+" '{print $4}' |
- 本文作者: GaryWu
- 本文链接: https://garywu520.github.io/2017/06/16/正则表达式egrep-sed-awk-整理总结/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!