Shell再次体检-工具使用cut sed awk sort
一 cut
cut的工作就是"剪",具体的说就是在文件中负责剪切数据用的.cut命令从文件的每一行剪切字节,字符,和字段并将这些字节,字符和字段输出.
1.基本用法
cut[选项参数] filename 说明:默认分隔符是制表符
2.选项参数说明
-f 列号,提取第几列的
-d 分隔符,按照指定的分隔符分割列
3.案例
vi mycut.txt lxz lxz lexue lexue beijing beijing best best
1)以" "作为分隔符,切割第一列
cut -d " " -f 1 mycut.txt
2)以" "作为分隔符,切割第二,三列
cut -d " " -f 2,3 mycut.txt
3)在cut.txt文件中,以" "作为分隔符,切割出"lxz"
cat cut.txt | grep "lxz" | cut -d " " -f 1
4)选取系统PATH变量值,第二个":"开始后的所有路径
# 查询PATH echo $PATH # 开始切割 echo $PATH | cut -d ":" -f 2-
5)切割ifconfig后打印的IP地址(这里写的有些粗糙,后面有空优化一下.)
ifconfig ens33 | grep "inet" | cut -d ":" -f 2 | cut -d "t" -f 2 | cut -d " " -f 2
二 set
sed是一种流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间",接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕,接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有改变,除非你使用重定向存储输出.
1.基本用法
sedp[选项参数] "command" filename
2.选项参数说明
-e 直接在指令列模式上进行sed的动作编辑
3.命令功能描述
a 新增,a的后面可以接字符串,在下一行出现
b 删除
c 查找并替换
4.案例
vi mysed.txt lxz bigdata lexue company 20210820 morning become strong
1)将“mei nv”这个单词插入到mysed.txt第二行下,打印。
注意:文件没改变
2)删除mysed.txt文件所有包含 lexue 的行
3)将mysed.txt文件中 lexue 替换为ni
注意:‘g’表示global,全部替换
4)将mysed.txt文件中的第二行删除并将become替换为ni
三 awk
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理.
1.基本用法
awk[选项参数] 'pattern1{action1} pattern2{action2}...' filename
pattern:表示AWK在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令
2.选项参数说明
-F 指定输入文件拆分隔符
-v 赋值一个用户定义变量
3.案例
sudo cp /etc/passwd ./
1) 搜索passwd文件以root关键字开头的所有行,并输出该行的第7列
awk -F: '/^root/{print $7}' passwd
2) 搜索passwd文件以root关键字开头的所有行,并输出该行的第一列和第七列,中间以","号分割
awk -F: '/^root/{print $1 "," $7}' passwd
注意:只有匹配了pattern的行才会执行action
3) 只显示/etc/passwd的第一列和第七列,以逗号分割,且在所有行前面添加列名 user, shell在最后一行添加"lxz,/bin/becomebatter"
awk -F: 'BEGIN{print "user,shell"} {print $1","$7} END{print "lxz,/bin/batter"}' passwd
注意:BEGIN在所有数据读取行之前执行;END在所有数据执行之后执行.
4) 将passwd文件中的用户id增加数值1并输出
awk -v i=1 -F: '{print $3+i}' passwd
AWK的内置变量
变量 说明
FILENAME 文件名
NR 已读的记录数
NF 浏览记录的域的个数(切割后,列的个数)
案例:
1) 统计passwd文件名,每行的行号,每行的列数
awk -F: '{print "filename:" FILENAME",linenumber:" NR",columns:" NF}' passwd
2)切割IP
# 输入 ifconfig eth0 | grep "inet addr" | awk -F: '{print $2}' | awk -F " " '{print $1}' # 输出 192.168.1.102
3) 查询sed.txt中空行所在的行号
# 输入 awk '/^$/{print NR}' mysed.txt # 输出 5
四 sort
sort命令是在Linux中非常有用的,它将文件进行排序,并将排序结果标准输出.
1.基本语法
sort(选项)(参数)
-n 依照数据的大小排序
-r 以相反的顺序来排序
-t 设置排序时所用的分隔字符
-k 指定需要排序的列
参数:指定待排序的文件列表
2.案例
vi mysort.sh bb:40:5.4 bd:20:4.2 xz:50:2.3 cls:10:3.5 ss:30:1.6
按照“:”分割后的第三列倒序排序
sort -t : -nrk 3 mysort.sh
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话