grep awk sed是Linux下文本处理常用的命令,这篇笔记就是详细阐述文本三剑客的用法
概述:
grep:文本过滤器,仅仅是过滤文本,没有编辑功能
sed:Stream EDitor,流编辑器,可以按照特定规则按行编辑数据(sed是不处理原数据的,编辑完的行默认是打印到屏幕,所以sed运行完原文件内容是不变的)
awk:报告生成器,可以根据特定字符分割行(如空格、冒号、顿号等),然后按照你设定的格式显示。(如果对处理的数据需要生成报告之类的信息,或者你处理的数据是按列进行处理的,最好使用 awk)
grep 更适合单纯的查找或匹配文本
sed 更适合编辑匹配到的文本(尤其擅长替换)
awk 更适合格式化文本,对文本进行较复杂格式处理(擅长取列)
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把匹配到的行打印出来)
是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。用于过滤/搜索的特定字符。
格式:grep 选项 '命令' 文件名
sed
sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到 最后一行。每当处理一行时,把当前处理的行存储在临时缓冲区中,称为 模式空间( Pattern Space ) ,接着用 sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下 一行,这样不断重复,直到文件末尾。一次处理一行的设计模式使得 sed 性能很高, sed在读取大文件时 不会出现卡顿的现象。如果使用 vi 命令打开几十 M 上百 M的文件,明显会出现有卡顿的现象,这是因为 vi 命令打开文件是一次性将文件加载到内存,然后再打开。 Sed就避免了这种情况,一行一行的处理, 打开速度非常快,执行速度也很快
格式:sed 选项 '命令' 文件名
地址定界
编辑命令
高级命令
替换
s/搜索内容/替换内容/:查找替换,支持使用其他分隔符,s@@@,s###
awk
awk是一种处理文本文件的语言,是一个强大的文本分析工具,它是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描、过滤、统计汇总工作数据可以来自标准输入也可以是管道或文件
格式:awk 选项 '命令' 文件名
内置变量
BEGIN和END
逐行执行开始之前执行什么任务,结束之后再执行什么任务,用BEGIN、END。BEGIN一般用来做初始化操作,仅在读取数据记录之前执行一次。END一般用来做汇总操作,仅在读取完数据记录之后执行一次
运算符
数组
awk可以使用关联数组这种数据结构,索引可以是数字或字符串。awk关联数 组也不需要提前声明其大小,因为它在运行时可以自动的增大或减小