正则表达式三剑客(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} | 匹配前一个字符最少n次,最多m次 |
a{n,} | 匹配前一个字符最少n次 |
a{n} | 匹配前一个字符正好n次 |
a{,m} | 匹配前一个字符最多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