Linux正则表达式三剑客(grep sed awk)基本用法
## 正则表达式三剑客(grep sed awk)基本用法
正则表达式(Regual Expression,REGEXP):由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制或通配的功能。是一套规则和方法,工作时以行为单位进行,一次处理一行,化繁为简,提高工作效率。仅受Linux三剑客(grep sed awk)使用,其它命令无法使用。
正则表达式的分类
1、基本正则表达式BRE: 匹配字符 、匹配字数 、位置锚定。
| 符号 | 作用 |
|---|---|
| ^ | 尖角号,用于模式的最左侧,如“^oldboy”,匹配以oldboy单词开头的行 |
| $ | 美元符,用于模式的最右侧,如“oldboy&”,表示以oldboy结尾的单词行 |
| ^$ | 组合符,表示空行 |
| . | 匹配任意一个且只有一个字符,不能匹配空行 |
| \ | 转义字符,让特殊含义的字符,显出原形还原本意,例如\ .代表小数点 |
| * | 匹配前一个字符(连续出现)0次或1次以上,重复0次代表空,即匹配所有内容 |
| .* | 组合符,匹配所有内容 |
| ^.* | 组合符匹配任意多个字符开头的内容 |
| .*$ | 组合符匹配任意多个字符结尾的内容 |
| [abc] | 匹配[]集合内的任意一个字符,a或b或c,可以写为[a-c] |
| [^abc] | 匹配除了后面的任意字符,a或b或c,表示对[abc]的取反 |
2、扩展正则表达式ERE
| 字符 | 作用 |
|---|---|
| + | 匹配前一 个字符一次或多次 |
| [😕]+ | 匹配括号内的“:”\“ 字符一次或多次 |
| ? | 匹配前一个字符0次或多次 |
| \ | 表示或者,同时过滤多个字符串 |
| () | 分组过滤,被括起来的内容表示一个整体 |
| a | 匹配前一个字符最少n次,最多m次 |
| a | 匹配前一个字符最少n次 |
| a | 匹配前一个字符正好n次 |
| a | 匹配前一个字符最多n次 |
grep 擅长单纯的查找或匹配文本内容
| 参数选项 | |
|---|---|
| -v | 排除匹配结果 |
| -n | 显示匹配行与行号 |
| -i | 不区分大小写 |
| -c | 只统计匹配的行数 |
| -E | 使用Egrep命令 |
| --color=auto | 为grep过滤结果添加颜色 |
| -w | 只匹配过滤的单词 |
| -o | 只匹配输出的内容 |
grep基本使用方法
找出所有m开头的行
]#grep -i -n "^m.*" luffy.txt
找出结尾的行
]#grep -n " \ .$" luffy.txt
找出所有允许登录的用户,解释器为/bin/bash/的行
]#grep -i -n ".\/bin\/bash$" pwd.txt
]#grep -n "/bin/bash$" pwd.txt
找出系统/tmp中的txt文件,且名字里包含a或b的字符
]#find /tmp -name "*.txt" |grep -E "t|e"
找出文件中good glad的行
]#grep -E "g(oo|la)d" test.txt
sed 更适合编辑、处理匹配到的文本内容
| 参数选项 | 解释 |
|---|---|
| -n | 取消默认sed的输出,常与sed内置命令p一起用 |
| -i | 直接将修改结果写入文件,不用-i,sed修改的是内存数据 |
| -e | 多次编辑,不需要管道符 |
| -r | 支持正则扩展 |
sed的内置命令符 用于对文件进行不同的操作功能,如对文件增删改查
sed常用 内置命令符
| sed的内置命令符 | 解释 |
|---|---|
| a | append,对文本追加,在指定行后面添加一行/多行文本 |
| d | Delete,删除匹配行 |
| i | insert,表示插入文本,在指定行前添加一行/多行文本 |
| p | Print,打印匹配行的内容,通常p与-n一起用 |
| s/正则/替换内容/g | 匹配正则内容,然后替换内容(支持正则),结尾g代表全局匹配 |
sed匹配范围
| 范围 | 解释 |
|---|---|
| 空地址 | 全文处理 |
| 单地址 | 指定文件某一行 |
| /pattern/ | 被模式匹配到的每一行 |
| 范围区间 | 10,20 十到二十行, 10,+5第十行向下5行,/pattern/,/pattern/ |
| 步长 | 1~2,表示1,3,5,7,9 2~2两个步长,表示2,4,6,8 |
sed基本使用方法
输出第2,3行信息
sed -n '2,3p' pwd.txt
过滤出含有root的字行
sed -n "/root/p" pwd.txt
删除有关root的行
sed "/root/d" pwd.txt
将文件中的root 替换成 beet
sed "s/root/beet/p" pwd.txt -n 全局替换 sed "s/root/beet/gp" pwd.txt -n
将文件中的root替换成beet 同时把games替换为stay
sed -e "s/root/beet/p" -e "s/games/stay/p" pwd.txt -n
在文件第二行下追加内容 白日依山尽 字符
sed "2a 白日依山尽" pwd.txt
在文件第4行上追加2两行内容 更上一层楼 欲穷千里目 字符
sed "4i 更上一层楼\n欲穷千里目" pwd.txt
取出Linux IP 地址
ifconfig ens33|sed "2s/^.*inet//p" |sed "2s/netm.*$//p" -n
ifconfig ens33|sed -e "2s/^.*inet//" -e "2s/net.*$//p" -n

浙公网安备 33010602011771号