文章目录
三剑客及正则表达式
一、特殊符号
1.命令连接类的
| #管道。前面命令的标准输出作为后面命令的标准输入
; #命令的结束符。同时运行多个命令
&& #当前面命令执行成功则执行后面命令
|| #当前面命令执行失败则执行后面命令
mkdir michael1 &>/dev/null && echo '1' || echo '0'
2.命令结合符号
`` #优先执行反引号中的命令
$() #和反引号功能一样
# 打包压缩,包名为以当天日期命名
tar zcvf `date +%F`.tar.gz
3.引号类的符号
不加引号: 空格会被作为分隔符,将字符串分为两部分。多个字符串是一个整体需要加引号
单引号'': 所见即所得,不会解析特殊符号
双引号"": 优先解析特殊符号,引号套引号,需要双引号套单引号
\ #转义符号。让一个特殊的符号不具备特殊功能
* #通配符
{} #数字或字符遍历
# #注释
二、三剑客
grep:擅长实现文本字符串过滤
sed:擅长进行文本行级处理。也具备文本过滤功能
awk:擅长进行文本的列级处理。具备sed和grep部分功能
1.grep的应用
作用:进行文本过滤
1.语法格式
grep 过滤的字符串 文本
# 查找当前系统中所有不可以登录系统的用户
grep '/sbin/nologin' /etc/passwd
2.核心参数 -v #取反
-i #不区分大小写
-o #显示过滤的过程
-A n #after。显示过滤到的行及其之后n行的内容
-B n #before。显示过滤到的行及其之前n行的内容
-C n #显示过滤到的行及其前后n行的内容
-n #显示行号
-w #按照字符串匹配
-r #用于递归查找
-l #过滤文本时只显示文件名。结合-r使用
2.sed的应用
语法格式
sed '条件动作' 文本
1.sed的动作
p #输出。必须结合参数-n使用
d #删除
a #插入新的行
c #替换
2.sed的条件
#按照行号做处理
## 请输出第5行内容
sed -n '5p' 1.txt
## 输出3-8行的内容
sed -n '3,8p' 1.txt
## 输出4到最后一行的内容
sed -n '4,$p' 1.txt
## 间隔性输出:输出奇数行
sed -n '1~2p' 1.txt
#多条件处理
sed -e '条件动作1' -e '条件动作2'
## 输出3.txt中第一行和包含b的行
sed -ne '1p' -e '/b/p' 3.txt
#文本过滤条件
sed -n '/过滤的字符串/动作'
## 输出/etc/passwd中包含/sbin/nologin的行
sed -n '/\/sbin\/nologin/p' /etc/passwd
## 输出文件中包含aaa到bbb的行,循环输出
sed -n '/aaa/,/bbb/p' 3.txt
#文本过滤结合行号使用
##输出第三行到包含bbb的行
sed -n '3,/bbb/p' 1.txt
#文本批量替换
sed -i 将修改重定向到原文件
sed 's#匹配的内容#替换成的内容#g'
##
sed -i 's#a#0#g' 3.txt
3.awk的应用
1.介绍
awk 解释型语言。支持独立编写脚本。用于实现数据分析处理结果
2.语法格式
awk '条件{print 内容}' 文件
3.实操应用
# 获取当前系统中所有用户的用户名
awk -F ':' '{print $1}' /etc/passwd
# 获取当前系统中所有用户的用户名和UID
awk -F ':' '{print "用户名:"$1,"UID:"$3}' /etc/passwd
# 获取当前系统中所有用户的用户名和命令解释器
awk -F ':' '{print $1,$NF}' /etc/passwd
# 获取当前系统中所有用户的用户名和家目录
awk -F ':' '{print $1,$(NF-2)}' /etc/passwd
4.awk的条件
# 查找当前系统中可用空间小于100w的文件系统
df|awk '$4<1000000{print $1,$4}'
# 按行输出结果
##输出前10行
seq 20 |awk 'NR<=10{print}'
##输出第20行
seq 20 |awk 'NR==20{print}'
# 文本过滤
##获取当前系统中不能登录用户的用户名和UID和命令解释器
awk -F ':' '/\/sbin\/nologin/{print $1,$3,$NF}' /etc/passwd
##获取当前系统中uid大于1000的不能登录用户的用户名和UID和命令解释器
awk -F ':' '$3>=1000&&/\/sbin\/nologin/{print $1,$3,$NF}' /etc/passwd
##获取当前系统中uid大于1000或者小于500的用户的用户名和UID和命令解释器
awk -F ':' '$3>=1000||$3<=500{print $1,$3,$NF}' /etc/passwd
二、正则表达式
-
作用:通过配合三剑客更加精准获取所需的文本内容
-
可用范围:仅限于三剑客命令能够识别
正则表达式和普通命令行下的符号长得一样但是功能完全不同
3.普通正则
. #匹配任意单个字符
* #前面的字符连续出现0次或多次
.* #所有
^ #匹配以某字符开头的行
$ #匹配以某字符结尾的行
^$ #空行
[] #在中括号中的字符,分别作为独立字符去匹配
[0-9] #匹配所有数字
[a-z] #匹配所有小写字母
[a-Z] #匹配所有大小写字母
[^] #取反
4.扩展正则
grep -E 支持扩展正则
sed -r 支持扩展正则
awk 默认支持
+ #前面的字符连续出现1次或多次
? #前面的字符连续出现0次或1次
{n} #前面的字符连续出现n次
{m,n} #前面的字符连续出现最少m次,最多n次
| #或者关系
() #作为整体
grep -vE '^#|^$' 文件 #去除文件所有注释和空格