grep 、sed、awk被称为linux中的"三剑客"。 grep 更适合单纯的查找或匹配文本 sed 更适合编辑匹配到的文本 awk 更适合格式化文本,对文本进行较复杂格式处理 系统三剑客-grep 正则查找 grep -v "^#|^$" 不显示注释行和空行 系统三剑客-sed sed 字符流的编辑器,处理每行的字符 全屏编辑工具 vi/vim cat >>xxx<<EOF...EOF 编辑脚本:修改文件内容时 1)擅长对行进行操作处理 (增删改查) 2)擅长将文件的内容信息进行修改调整/删除 脚本幂等性!!!! vim network.sh #!/bin/bash #修改ip地址,把1.2修改成1.3 sed -i "s#192.168.1.2#192..168.1.3#g" /etc/sysconfig/network-scripts/ifcfg-eth0 sed -i "s#(.*)0(.*)#\110\2#g" /etc/sysconfig/network-scripts/ifcfg-eth0 #重启网络 systemctl restart network #获取主机ip地址 echo "服务器地址修改后IP地址:$(hostname -I)" >> /tmp/tip.txt sed [OPTION]... {script-only-if-no-other-script} [input-file]... 命令 参数 条件-处理 文件 2.sed的工作原理 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓 冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理 完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件 内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化 对文件的反复操作 不加-i参数默认值是操作内存中的数据,不修改磁盘中的内容 sed命令实战 查 -n取消默认输出 (模式空间) sed -n '3p' preson.txt 显示第三行并显示 sed -n '1p,3p' preson.txt 显示一行到三行 sed -n '1p;3p' preson.txt 显示一行和三行 sed -n '/odlboy/p' preson.txt 查看含有odlboy并输出p sed -n '/odlboy/,/alx/p' preson.txt 查看含有odlboy到alx 添加 sed -i '1i100,oldg,CEO' preson.txt 在首行插入 sed -i '$a100,oldg,CEO' preson.txt 在文件的末尾添加 sed -e '/odlboy/iodlg -e /alx/aalxboy' 多个操作指令,在odlboy前插入odlg,在alx后添加alxboy sed '$a100\n102' 添加多行信息 删除 sed -i '3d' preson.txt 删除第三行 sed -n '^$/!p' 取消空行显示 '!取反' 修改信息 sed 's#原有内容#修改后内容#g' preson.txt sed 's/原有内容/修改后内容/g' preson.txt sed 's#()#\n#g' preson.txt 后项引用后项,\n代表第几个小括号 sed -i.bak 's/原有内容/修改后内容/g' preson.txt 修改前进行备份 &调用匹配的信息ls file*.txt ls file*.txt |sed -r 's#(.*)txt#mv & \1jpg#gp'|bash 取ip地址 ip a s eth0 |sed -rn '3s#^.*net(.*)/24.*#\1#gp' 批量专业重命名 rename .jpg .txt file*.jpg 命令 需要修改的 修改后的 原来的 touch file{1..10}.txt 批量创建 p print 输出信息 i insert 插入信息在指定行 a append 附加信息在指定行 d delete 删除指定行 s substitute 替换 s###g(g全局替换) c 替换修改一整行的内容 总结:sed参数信息 -n 取消默认输出 -r 识别扩展正则 -i 将内存中的 信息覆盖到磁盘中 -e 识别sed命令多个操作指令 说明:-ni同时用,会把文件清空 系统三剑客-awk 作用特点:1.排除信息 2.查询信息 3.统计信息 4.替换信息 语法格式:awk '{pattern + action}' {filenames} 命令 参数 模式-动作 文件 查 例子: zhang san 1234567 :100:160:170 awk 'NR==2,NR==4' test.txt 查看第二行到第四行 awk 'NR==2;NR==4' test.txt 查看第二行和第四行 awk '/odlboy/' test.txt 按字符查找 awk '/odlboy/{print $1,$3}' test.txt 显示第一列和第三列信息 awk '/odlboy/{print $NF}' test.txt 倒数第一列(NF-1倒数第二列) awk -F ':'{print $2} test.txt 自定义分割,以冒号为分割 awk -F ":" '/^zhang/{print $3}' test.txt :100:160:170 取160 awk -F "[ :]+" '/^zhang/{print $1,$2,$(NF-1)}' test.txt 匹配 zhang san 160 awk '$3~/^123/{print}' test.txt 匹配第三列以123开头的$ awk '$3~/7$|5$/{print}' test.txt 匹配第三列5或7结尾的(5|7)$或[57]$ gsub(/需要替换的信息/,替换成什么,对哪列进行操作) 替换 awk '$3~/^123/{gsub(/:/,"$",$N)F;print}' test.txt $100$160$170 把:替换成$ awk高级功能 a)对日志信息进行统计计数,上传下载 消耗网络流量 b)数组进行排序分析 普通模式 NR==2 NR>=2 NR<=2 特殊模式 BEGIN{} 在awk执行前干什么 awk BEGIN{FS=":"}{print} == awk -F ":" == -vFS=":" awk 'BEGIN{print "姓","名","qq","捐款记录"}$2~/[sw]/{print}' test.txt |column -t column -t 表格格式输出 END{} 在awk结束后干什么 awk "/^#/{i=i+1;print i}" /etc/yum.conf 统计井号开头的行数 awk '$NF~/bash/{i=i+1}END{print i}' /etc/passwd 统计普通用户的数量 sum=sum+$1 第一列求和 awk -F ':' '$2~/[sw]/{sum=sum+$4}END{print sum}' test.txt