grep、sed 和 awk 简介
awk、grep、sed 是 Linux 操作文本的三大利器,合称文本三剑客,也是必须掌握的 Linux 命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属 awk 功能最强大,但也最复杂。
-
grep 更适合单纯的查找或匹配文本
-
sed 更适合编辑匹配到的文本
-
awk 更适合格式化文本(对文本进行较复杂格式处理)
grep
Linux系统中 grep 命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来(匹配到的标红)。grep 全称是 Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
grep 的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。
grep 可用于 shell 脚本,因为 grep 通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回 0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回 2。我们利用这些返回值就可进行一些自动化的文本处理工作。
egrep = grep -E:扩展的正则表达式 (除了< , > , \b 使用其他正则都可以去掉\)
命令格式
grep [option] pattern file
命令功能
用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。
常用参数
-
-A<显示行数>:除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-
-B<显示行数>:除了显示符合样式的那一行之外,并显示该行之前的内容。
-
-C<显示行数>:除了显示符合样式的那一行之外,并显示该行之前后的内容。
-
-c:统计匹配的行数
-
-e :实现多个选项间的逻辑or 关系
-
-E:扩展的正则表达式
-
-f FILE:从FILE获取PATTERN匹配
-
-F :相当于fgrep
-
-i --ignore-case #忽略字符大小写的差别。
-
-n:显示匹配的行号
-
-o:仅显示匹配到的字符串
-
-q: 静默模式,不输出任何信息
-
-s:不显示错误信息。
-
-v:显示不被pattern 匹配到的行,相当于[^] 反向匹配
-
-w :匹配整个单词
-
-r 或 --recursive : 以递归的方式查找符合条件的文件
cut
cut [选项] 文件名 默认分割符是制表符
选项:
-f 列号: 提取第几列
-d 分隔符: 按照指定分隔符分割列
cut 的局限性:不能分割空格
awk
一个强大的文本分析工具
把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
语法:awk ‘条件1{动作1}条件2{动作2}...’文件名
条件(Pattern):
-
一般使用关系表达式作为条件: > >= <=等
动作(Action):
-
格式化输出:print 和 printf
-
流程控制语句
指定分割符:-F分隔符
sed
sed 是一个非交互性文本流编辑器。它编辑文件或标准输入导出的文本拷贝(复制然后再修改)。标准输入可能是来自键盘、文件重定向、字符串或变量,或者是一个管道的文本。
注意: sed 并不与初始化文件打交道, 它操作的只是一个拷贝,然后所有的改动如果没有重定向到一个文件,将输出到屏幕。
语法:sed [选项]’[动作]’ 文件名
常用选项:
-
-n 使用安静(silent)模式。显示经过 sed 特殊处理的数据
-
-e 允许多点编辑
-
-i 直接修改读取的档案内容,而不是由屏幕输出。
命令 | 功能描述 |
---|---|
a\ | 新增, a 的后面可以接字串,在下一行出现 |
c\ | 替换 |
d | 删除 |
i\ | 插入, i 的后面可以接字串 |
p | 打印 |
s | 查找并替换,例如 1,20s/old/new/g |