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

grep/awk/sed笔记

基础概念

grepawksed是Linux中用于文本处理的三大工具,各自有不同的设计目标:

  • grep:专注于文本搜索,支持正则表达式匹配。
  • awk:完整的文本处理语言,支持字段分割、计算和格式化输出。
  • sed:流编辑器,擅长对文本进行替换、删除、插入等操作。

grep常用操作

搜索包含关键词的行

grep "pattern" filename

忽略大小写

grep -i "pattern" filename

显示匹配行的行号

grep -n "pattern" filename

递归搜索目录

grep -r "pattern" /path/to/dir

反向匹配(不包含关键词的行)

grep -v "pattern" filename

awk常用操作

打印文件的第1列和第3列

awk '{print $1, $3}' filename

按条件过滤行(如第2列大于10的行)

awk '$2 > 10 {print $0}' filename

自定义分隔符(如以逗号分隔)

awk -F',' '{print $2}' filename

计算列的总和

awk '{sum += $1} END {print sum}' filename

内置变量示例(NR:行号,NF:字段数)

awk '{print NR, NF}' filename

sed常用操作

替换文本(首次匹配)

sed 's/old/new/' filename

替换所有匹配

sed 's/old/new/g' filename

删除匹配行

sed '/pattern/d' filename

在指定行后插入文本

sed '2a\inserted text' filename

直接修改文件(原地编辑)

sed -i 's/old/new/g' filename

组合使用示例

统计日志中404错误的数量

grep "404" access.log | awk '{print $7}' | sort | uniq -c

提取CSV文件的第2列并替换逗号

awk -F',' '{print $2}' data.csv | sed 's/,/ /g'

过滤包含关键词的行并显示行号

grep -n "error" syslog | awk -F: '{print "Line", $1, ":", $2}'

正则表达式支持

三工具均支持基础正则表达式(BRE),部分支持扩展正则表达式(ERE):

  • grep -E:启用ERE(如+, ?, |)。
  • awk:默认支持ERE。
  • sed -r:部分版本支持ERE(如GNU sed)。

示例:匹配IP地址

grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' logfile

性能对比

  • grep:搜索速度最快,适合简单匹配。
  • awk:处理结构化数据(如CSV)更高效。
  • sed:批量编辑文件时性能优于手动操作。

常见问题

如何匹配多行模式?

  • grep需搭配-z选项(处理NUL分隔的数据)。
  • sed可用N命令读取下一行。
  • awk通过设置RS(记录分隔符)实现。

如何输出彩色结果?

grep --color=auto "pattern" filename

如何处理特殊字符(如制表符)?

  • awk-F'\t'指定分隔符。
  • sed:用$'\t'表示制表符(bash环境)。
http://www.xdnf.cn/news/10103.html

相关文章:

  • 超高频RFID读写器天线分类及应用场景
  • 深入理解用于中断控制的特殊寄存器
  • pm2守护进程管理器
  • Word2Vec 生成词向量
  • 【python基础知识】列表简介
  • 会议室钥匙总丢失?换预约功能的智能门锁更安全
  • 如何做好一份技术文档:从信息孤岛到知识图谱的进阶之路
  • 国芯思辰| SC751X替换OPA2354/OPA354/OPA4354可调激光器应用方案
  • 网络编程4-epoll
  • 多模态大语言模型arxiv论文略读(101)
  • 大语言模型中的注意力机制详解
  • gitlib 常见命令
  • 【xmb】内部文档148344596
  • nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: 80端口被占用
  • GEARS以及与基础模型结合
  • 产品更新|数字主线深度解析:华望解决方案助力企业数字化转型
  • Linux入门(十一)进程管理
  • 分布式锁和数据库锁完成接口幂等性
  • 深度学习初探:当机器开始思考(superior哥AI系列第1期)
  • 线程池的详细知识(含有工厂模式)
  • STM32通过rt_hw_hard_fault_exception中的LR寄存器追溯程序问题​
  • 深圳南山沙河社区联合心美行动举办“青少年天赋提升”助青春成长
  • 用于工业设备的高精度仪表放大器“NL9620”开始上市~日本首家!高EMC性能的仪表放大器
  • 使用matlab读取txt文件中的2进制数据
  • 文字转图片的字符画生成工具
  • JavaScript 计算两个日期之间天数的全面指南
  • [网页五子棋][对战模块]前后端交互接口(建立连接、连接响应、落子请求/响应),客户端开发(实现棋盘/棋子绘制)
  • 将Kotti从Pyramid1.0升级到2.0 (失败的记录)
  • CATIA高效工作指南——测量分析篇(一)
  • C++ TCP程序增加TLS加密认证