-
课程知识梳理复习
- 三剑客sed命令概述介绍
作用说明: 擅长对文件信息进行编辑/擅长对行进行操作
执行原理: 按照行进行处理文件
处理信息会在模式空间中完成
根据条件找出信息 完成相应处理指令(p d a i c s g)
需要将模式空间中内容覆盖到磁盘文件中 -i
语法结构: sed [参数] ‘条件信息 处理指令’ 文件信息 - 三剑客sed命令使用练习
a 如何查询数据信息
b 如何删除数据信息 -ni -i.bak
c 如何修改数据信息 s###g #oldboy -> oldgirl s@#oldboy@oldgirl@g
d 如何添加数据信息 a i -e
sed命令应用总结
sed命令参数总结:
-n : 取消默认输出
-e : 识别多操作指令
-r : 识别扩展正则
-i : 真正编辑修改文件内容
sed命令指令信息:
p : 输出显示指定信息
d : 删除指定信息
s : 替换指定信息
g : 全局替换信息
a : 添加指定信息在相应行的后面
i : 插入指定信息在相应行的前面
c : 将一行信息进行替换修改
awk 排除 查询 替换 统计
- 三剑客sed命令概述介绍
-
三剑客awk命令概念介绍
概念说明: pattern scanning and processing language
模式识别和脚本编写
执行原理: 按行处理文件信息, 根据匹配条件信息, 完成相应操作动作
语法结构: awk [参数] ‘模式信息(条件) {动作}’ 文件信息
03、awk使用方法
column-t
如果有波浪线,!取反 放到波浪线前面,
练习题:
1) 显示xiaoyu的姓氏和ID号码
a 可以根据行号信息进行处理
思路1) 将xiaoyu信息进行匹配
awk ‘NR==2’ /oldboy/awk_test.txt
思路2) 根据需求进行处理
awk ‘NR==2{print $1 $3}’ /oldboy/awk_test.txt
执行过程:
[root@linux67 ~]# awk ‘NR2{print $1,$3}’ /oldboy/awk_test.txt
Zhang 390320151
[root@linux67 ~]# awk 'NR2{print $1" "$3}’ /oldboy/awk_test.txt
Zhang 390320151
说明: awk取出多列信息可以使用 , 或者 " " 进行分隔
b 可以根据内容信息进行处理
思路1) 将xiaoyu信息进行匹配
awk ‘$2~/Xiaoyu/’ /oldboy/awk_test.txt
思路2) 根据需求进行处理
awk ‘$2~/Xiaoyu/{print $1,$3}’ /oldboy/awk_test.txt
2) 姓氏是zhang的人,显示他的第二次捐款金额及他的名字
a 按照内容取出指定行信息
思路1) 取出姓zhang的人信息
# awk ‘$1~/Zhang/’ awk_test.txt
Zhang Dandan 41117397 :250💯175
Zhang Xiaoyu 390320151 :155:90:201
思路2) 第二次捐款记录 和 姓名取出来
awk默认以空格划分多列信息
awk可以对列分隔符号进行修改 -F “分隔符号”
[root@linux67 oldboy]# cat test.txt
oldboy:linux67:weige
oldboy:linux67:leige
oldboy:linux67:yige
[root@linux67 oldboy]# awk -F “:” ‘{print $3}’ test.txt
weige
leige
yige
awk可以对列分隔符号进行修改, 并且可以指定多个分隔符号 -F “[分隔符号01分隔符号02]”
[root@linux67 oldboy]# cat test.txt
oldboy:linux67>weige
oldboy:linux67>leige
oldboy:linux67>yige
[root@linux67 oldboy]# awk -F “[:>]” ‘{print $3}’ test.txt
weige
leige
yige
最终答案:
[root@linux67 oldboy]# awk ‘$1~/Zhang/’ awk_test.txt
Zhang Dandan 41117397 :250💯175
Zhang Xiaoyu 390320151 :155:90:201
[root@linux67 oldboy]# awk -F “[ :]+” ‘$1~/Zhang/{print $1,$2,$5}’ awk_test.txt
Zhang Dandan 100
Zhang Xiaoyu 90
扩展问题: 显示所有ID号码最后一位数字不是1或5的人的全名
5) 显示Xiaoyu的捐款,每个时都有以$开头, 如$110$220$330
-
显示Xiaoyu的捐款,每个捐款数值都有以$开头, 如$110$220$330
awk -F “[: ]+” ‘KaTeX parse error: Expected '}', got 'EOF' at end of input: …Xiaoyu/{print "" 4 , " 4," 4,"" 5 , " 5," 5,""$6}’ awk_test.txt
awk ‘$2~/Xiaoyu/{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 4}̲' awk_test.txt …#g’
awk '$2~/Xiaoyu/{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 4}̲' awk_test.txt …’print : 输出指定的信息 gsub : 替换指定的信息 gawk substitute -- gsub gsub(//,"",$x) --> gsub(/要替换的信息/,"替换成什么信息",$第几列信息做替换) gsub(/:/,"$",) # awk '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' awk_test.txt $155$90$201 说明: NF表示列信息, $NF表示最后一列, ? 倒数第二列 == $3 $NF == $4 - 1 oldboy linux edu 50 $(NF-1) ($NF) $(4-1) $4 $4==$NF==50 $NF-1==50-1=49
作用:
1) 可以实现数值运算 — 计算器
[root@linux67 oldboy]# awk ‘BEGIN{print 2+3}’
5
[root@linux67 oldboy]# awk ‘BEGIN{print 2-3}’
-1
[root@linux67 oldboy]# awk ‘BEGIN{print 2*3}’
6
[root@linux67 oldboy]# awk ‘BEGIN{print 2^3}’
8
[root@linux67 oldboy]# awk ‘BEGIN{print 2/3}’
0.666667
-
可以实现变量设置
[root@linux67 oldboy]# awk ‘BEGIN{name=“oldgirl”}$2~/Xiaoyu/{print name,$1,$2}’ awk_test.txt
oldgirl Zhang Xiaoyu
[root@linux67 oldboy]# awk ‘BEGIN{name=“oldgirl”}$2~/Xiaoyu/{print “name”,$1,$2}’ awk_test.txt
name Zhang Xiaoyu[root@linux67 oldboy]# awk -F “[ :]+” ‘$1~/Zhang/{print $1,$2,$5}’ awk_test.txt
Zhang Dandan 100
Zhang Xiaoyu 90
[root@linux67 oldboy]# awk ‘BEGIN{FS="[ :]+"}$1~/Zhang/{print $1,$2,$5}’ awk_test.txt
Zhang Dandan 100
Zhang Xiaoyu 90
[root@linux67 oldboy]# awk -vFS="[ :]+" ‘$1~/Zhang/{print $1,$2,$5}’ awk_test.txt
Zhang Dandan 100
Zhang Xiaoyu 90内置变量:
NR : 表示行的信息
NF : 表示列的信息
FS : 表示指定分隔符号
- 课程知识总结说明:
- awk命令概念介绍 语法结构/执行原理
- awk命令操作方法 按列取出信息/指定分隔符号 进行取反操作 替换操作
- awk命令高级操作 特殊模式(BEGIN/END) 内置变量(NR,NF,FS) 统计运算方法(累加运算/求和运算)
累加运算: i=i+1 --> i++
求和运算: i=i+$n
预习:
系统权限概念: - 普通文件 目录 r w x
- 普通用户权限如何改变(提权)
sudo chmod/chown - 用户相关的命令 useradd usermod userdel groupadd groupmod groupdel
这样就可以直接加!取反
NF代表 number 表示列信息,$ 区域 表示最后一列