Linux基础10-shell2
sed流式编辑器
sed是一个非交互的文本编辑器,实现的功能跟vim相同,主要是对文件内容进行输出、删除、替换、复制、剪切、导入、导出等功能
命令格式1:前置命令 | sed [选项] '[指令]' 文件名
命令格式2: sed [选项] '[指令]' 文件名
常用选项:
-n #屏蔽默认输出;默认将所有结果输出到屏幕
-i #直接修改文件内容,若不加-i不会真正改变文件的内容
-r #使用扩展正则,若与其他选项连用应作为首个选项
动作指令:
p #打印指定的行,如:2,4p 打印第234行,2p;4p 打印第2行与第4行
d #删除指定的行,如:2,4d 删除第234行,2d;4d 删除第2行与第4行
s #字符串替换,如:s/旧子串/新子串/ ;默认只替换每一行匹配到的第一个子串
# '/' 只是替换符,可使用任意的特殊字符
#替换文件中每一行匹配到的第一个子串:sed 's/xx/oo/' test
#替换文件中每一行匹配到的第二个子串:sed 's/xx/oo/2' test
#替换文件中每一行匹配到的所有子串:sed 's/xx/oo/g' test
r #导入文件内容,默认读一行导一次
#将文件导入到指定的行下:sed '1r/opt/a.txt' test
w #导出文件内容
#将test的第一行内容导出到b.txt:sed '1w b.txt' test
sed -n '$=' 文件名 #统计文件行数
awk编程语言
基于模式匹配检查输入文本,逐行处理并输出,获取指定的数据
awk过滤数据时支持仅打印某一列
命令格式1:awk [选项] '条件1{指令} 条件2{指令}' 文件名
命令格式2:前置命令 | awk [选项] '条件{指令}'
常用指令:print #打印
常用选项:-F #指定分隔符,默认以空格为分隔符,可通过[]集合匹配多种单个字符
awk内置变量:$1第一列,$2第二列,以此类推,NR文件当前行号,NF文件当前列数
#默认以空格为分隔符打印文件第1列和第7列:awk '{print $1,$7}' test
#手动指定以:为分隔符打印文件第1列:awk -F: '{print $1}' test
#通过[]集合匹配多种单个字符作为分隔符打印文件第1列和第7列:awk -F[:\] '{print $1,$7}' test
#打印文件每一行与每一行的列数:awk '{print NR,NF}' test
#匹配第一列包含root的行并打印第1列:awk -F: '$1~/root/{print $1}' test
awk使用数值/字符串比较设置条件
等于:==
不等于:!=
大于:>
大于等于:>=
小于:<
小于等于:=<
#打印文件中第3列大于等于1000,打印第1列,第3列,第7列:awk -F: '$3>=1000{print $1,$3,$7}' test
awk过滤时机:awk 'BEGIN{指令} {指令} END{指令}' 文件名
BEGIN{指令} #读取文件内容之前执行命令,指令执行一次,行前处理
{指令} #读取文件过程中执行,指令逐行执行,读一行,执行一次
END{指令} #读取文件内容结束后执行指令,指令执行一次,行后处理
#通过awk统计系统里使用bash解释器的用户有什么个:
awk 'BEGIN{x=0}/bash$/{x++}END{print x}' /etc/passwd
awk分支结构
if单分支格式:if(条件){指令}
#if单分支统计passwd文件中UID大于或等于1000的用户个数
awk -F: '{if($3>=1000){x++}}END{print x}' /etc/passwd
if双分支格式:if(条件){指令}else{指令}
#if双分支统计passwd文件中UID大于等于1000的用户,和小于1000的用户个数
awk -F: '{if($3>=1000){i++} else{x++}} END{print i,x}' /etc/passwd
awk数组
定义数组格式1:数组名[下标]=值
定义数组格式2:数组名[下标]
数组用法:for(变量名 in 数组名){print 数组名[变量]}
awk循环结构
命令格式:for(变量名 in 数组名){print 数组名[变量]}
awk命令格式2:前置命令 | awk [选项] '条件{指令}'
#通过awk打印剩余内存:free -h | grep Mem | awk '{print $4}'
#通过awk统计用户登录系统的次数:who | awk '{ip[$1]++}END{for(i in ip)print i,ip[i]}'
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)