当前位置: 首页 > news >正文

Linux sed 和 awk 命令使用方法

Linuxsed命令使用方法sedStream Editor是 Linux 中强大的流编辑器常用于文本替换、删除、插入等操作。基本语法sed[选项]命令文件常用选项选项说明-i直接修改文件无输出-e执行多个命令-n安静模式只打印处理的行-r或-E使用扩展正则表达式核心命令命令说明s/old/new/替换第一个匹配s/old/new/g全局替换d删除行p打印行a在行后追加i在行前插入c替换整行y字符转换常用示例1. 文本替换# 替换首次匹配seds/old/new/file.txt# 全局替换seds/old/new/gfile.txt# 忽略大小写seds/old/new/gifile.txt# 只替换第2个匹配seds/old/new/2file.txt# 直接修改文件sed-is/old/new/gfile.txt2. 指定行操作# 替换第3行的内容sed3s/old/new/file.txt# 替换第2-5行的内容sed2,5s/old/new/file.txt# 替换以 root 开头的行sed/^root/s/bash/csh//etc/passwd3. 删除行# 删除第3行sed3dfile.txt# 删除第2-5行sed2,5dfile.txt# 删除空白行sed/^$/dfile.txt# 删除包含error的行sed/error/dfile.txt# 删除最后一行sed$dfile.txt4. 打印与查看# 只打印第5行需配合 -nsed-n5pfile.txt# 打印第3-7行sed-n3,7pfile.txt# 打印匹配行sed-n/error/pfile.txt5. 插入与追加# 在第2行后追加sed2a\这是新行file.txt# 在第3行前插入sed3i\插入的内容file.txt# 在匹配行后追加sed/pattern/a\追加内容file.txt6. 多个命令# 使用 -esed-es/old/new/-es/foo/bar/file.txt# 使用分号seds/old/new/; s/foo/bar/file.txt# 使用花括号针对特定行sed/pattern/{s/old/new/; s/foo/bar/}file.txt7. 使用变量# 使用双引号以解析变量oldhellonewworldseds/$old/$new/gfile.txt8. 常见实用场景# 注释掉包含特定内容的行sed/pattern/s/^/#/file.txt# 删除行首空格seds/^[ \t]*//file.txt# 删除行尾空格seds/[ \t]*$//file.txt# 提取IP地址ifconfig|sed-ns/.*inet \([0-9.]*\) .*/\1/p注意事项不加-i时sed只输出到屏幕不修改原文件使用-i前建议先测试或备份sed -i.bak s/old/new/g file正则中的特殊字符需要转义/、*、.、[、]等分隔符可自定义sed s|/path/old|/path/new|用|避免转义Linuxawk命令使用方法awk是一种强大的文本处理工具和编程语言擅长按列处理数据、格式化报告和文本分析。基本语法awk[选项]模式{动作}文件模式条件匹配可选动作要执行的命令用{}包围常用选项选项说明-F指定字段分隔符-v设置变量-f从脚本文件读取命令核心概念内置变量变量说明$0整行内容$1, $2...第1、2…列NF字段总数NR当前行号FNR当前文件的行号FS输入字段分隔符OFS输出字段分隔符RS输入记录分隔符ORS输出记录分隔符常用内置函数函数说明length(str)字符串长度tolower(str)转小写toupper(str)转大写substr(str, i, n)提取子串split(str, arr, sep)拆分字符串sprintf(fmt, expr)格式化输出常用示例1. 基本打印操作# 打印整行awk{print $0}file.txt# 打印第1列和第3列awk{print $1, $3}file.txt# 打印最后一列awk{print $NF}file.txt# 打印倒数第二列awk{print $(NF-1)}file.txt# 打印行号和内容awk{print NR: $0}file.txt2. 指定分隔符# 使用冒号分隔处理 /etc/passwdawk-F:{print $1, $3}/etc/passwd# 使用正则作为分隔符awk-F[ ,]{print $2}file.txt# 在BEGIN块中设置awkBEGIN{FS:} {print $1, $3}/etc/passwd# 输出时指定分隔符awkBEGIN{OFS---} {print $1, $2}file.txt3. 模式匹配# 匹配包含error的行awk/error/ {print $0}log.txt# 匹配以root开头的行awk/^root/ {print $0}/etc/passwd# 第3列匹配特定值awk$3 0 {print $1, $3}/etc/passwd# 第1列包含aliceawk$1 ~ /alice/ {print $0}file.txt# 不匹配awk$1 !~ /alice/ {print $0}file.txt4. 条件判断# 数字比较awk$3 1000 {print $1, $3}/etc/passwd# 复合条件awk$3 1000 $3 2000 {print $1, $3}/etc/passwd# if语句awk{if($3 1000) print $1, admin; else print $1, user}/etc/passwd# 三目运算符awk{print ($31000 ? admin : user)}/etc/passwd5. 行范围# 打印第2-5行awkNR2 NR5file.txt# 从匹配行开始打印awk/start/,/end/file.txt# 跳过前10行awkNR10file.txt# 打印奇数行awkNR%21file.txt6. BEGIN 和 END# 在开始和结束时执行awkBEGIN{print Start} {print $0} END{print End}file.txt# 计算总行数awkEND{print NR}file.txt# 计算某列总和awk{sum$1} END{print 总和:, sum, 平均值:, sum/NR}file.txt# 打印表头awkBEGIN{printf %-10s %-10s\n, 姓名, 分数} {printf %-10s %-10d\n, $1, $2}file.txt7. 字符串操作# 字符串拼接awk{print $1 $2}file.txt# 无空格awk{print $1, $2}file.txt# 有空格# 长度检查awklength($1) 5 {print $1}file.txt# 大小写转换awk{print toupper($1), tolower($2)}file.txt# 子串提取awk{print substr($1, 2, 3)}file.txt# 从第2字符取3个8. 数组操作# 统计重复次数awk{count[$1]} END{for(i in count) print i, count[i]}file.txt# 去除重复行awk!seen[$0]file.txt# 统计各IP访问次数awk{ip[$1]} END{for(i in ip) print i, ip[i]}access.log9. 数学计算# 平均值、最大值、最小值awk{sum$1; if($1max) max$1; if(min) min$1; if($1min) min$1} END{print 平均值:, sum/NR, 最大值:, max, 最小值:, min}file.txt# 格式化输出awk{printf %.2f\n, $1/100}file.txt10. 实战场景# 查看CPU使用率top-b-n1|awk/%Cpu/ {print $2}# 查看内存使用free-m|awkNR2{printf 已用: %.1f%%\n, $3/$2*100}# 统计日志中HTTP状态码awk{print $9}access.log|sort|uniq-c|sort-rn# 过滤并计算psaux|awk$35.0 {print $2, $3, $11}# CPU5%的进程# 多文件处理awkNRFNR{a[$1]$2; next} {print $1, a[$1]}file1.txt file2.txt高级技巧格式化输出# 对齐输出awk{printf %-10s %5d\n, $1, $2}file.txt# 保留小数awk{printf %.2f\n, $1/$2}file.txt多命令执行# 使用分号awk{print $1; print $2}file.txt# 使用多个动作块awk{print $1} {print $2}file.txt外部变量# 传递shell变量var100awk-vmyvar$var$1 myvarfile.txt# 使用多个变量awk-va$var1-vb$var2{print a, b, $0}file.txtsed vs awk 选择建议场景推荐简单替换、删除sed基于列的数据处理awk复杂文本转换awk正则替换sed数值计算、统计awk多文件关联处理awk实用单行命令# 计算文件行数awkEND{print NR}file.txt# 打印第10行awkNR10file.txt# 每行翻转列顺序awk{for(iNF;i0;i--) printf %s , $i; print }file.txt# 移除空行awkNFfile.txt# 添加行号awk{print NR, $0}file.txt
http://www.zskr.cn/news/1358874.html

相关文章:

  • 深入Nginx源码:我是如何通过阅读补丁文件理解CVE-2022-41741漏洞原理的
  • 系统盘C盘空间告急?别急着重装!用微PE启动盘里的分区工具轻松扩容教程
  • Geist字体终极指南:如何用开源字体革命性提升开发与设计效率
  • 免费德州扑克GTO求解器终极指南:如何用Desktop Postflop提升你的扑克决策能力
  • 如何用强化学习解决城市交通拥堵:SUMO-RL智能交通信号控制终极指南
  • 三步重塑老旧Mac:OpenCore Legacy Patcher让旧硬件重获新生
  • VirtualBox 7.0.12 + Ubuntu 22.04 LTS 保姆级安装教程:从镜像下载到共享文件夹配置
  • AI 获客竞争加剧 武汉实体门店该如何挑选靠谱 GEO 优化服务商 - 品牌洞察官
  • Overleaf字体进阶:手把手教你用\renewcommand定制专属文档样式(以学术论文为例)
  • 别再死记硬背了!用Multisim仿真软件,5分钟搞懂三极管放大电路的静态工作点设置与失真分析
  • 体验分钟级接入为网站原型注入AI能力
  • 从零搭建机器人仿真环境:在Ubuntu18.04上玩转ROS Melodic与Gazebo9的完整配置清单
  • YgoMaster终极指南:免费离线畅玩完整游戏王体验
  • 泉盛UV-K5/K6固件升级完全指南:从频谱分析到专业通信的5个关键技巧
  • TrafficMonitor插件完整指南:让Windows任务栏变身全能监控中心
  • 3DS原生GBA硬件实战指南:open_agb_firm深度解析与高效方案
  • QLoRA微调Mistral-7B实战:4-bit量化+LoRA端到端跑通指南
  • Midjourney渐变风格失效的3大隐性陷阱(设计师90%都踩过的底层权重雷区)
  • 缓存一致性协议与侧信道攻击:Shield Bash攻击原理与防御
  • 手把手复现GRES:用Swin+BERT在gRefCOCO数据集上跑通第一个多目标指代分割模型
  • 免费AI搜索工具怎么选?2026年实测TOP8工具性能、响应速度与隐私合规性深度评测
  • 【限时解密】Midjourney内部颗粒渲染引擎逻辑:基于逆向API日志的噪声生成时序图(仅开放72小时,含调试token领取)
  • 华大半导体三大产品线深度解析:安全控制、汽车电子与功率芯片实战指南
  • 可控生成时代:深度合成技术的可信落地实践指南
  • 【电路板】模拟电路板激光加工中的热分布【含Matlab源码 15559期】
  • 【Gemini深度研究模式实战指南】:20年AI工程师亲测的5大隐藏技巧与避坑清单
  • 从SKU级预测到顾客意图建模:零售AI Agent必须打通的4层知识图谱(含开源Schema与实体关系映射表)
  • 需求变更失控?用Claude构建动态需求追踪矩阵,1个指令生成可追溯PRD+测试用例+排期甘特图
  • 【Claude学术写作辅助应用】:20年科研老兵亲测的5大论文提效黑科技,92%学者不知道
  • 教育工作者AI知识管理系统选型避坑手册(2024教育部备案平台实测TOP7对比)