在平常的数据处理过程中,这三个对文件进行数据处理的命令非常实用,在此整理在一下,方便忘的时候查阅
参考文章:
Linux文本三剑客超详细教程---grep、sed、awk - alonghub - 博客园 (cnblogs.com)
Linux三剑客(grep sed awk) 之 grep
awk、grep、sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一。
三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。
grep更适合单纯的查找或匹配文本,
sed更适合编辑匹配到的文本,
awk更适合格式化文本,对文本进行较复杂格式处理。
一、grep
1.grep介绍
grep:一个用正则表达式搜索文本的命令,可过滤/搜索特定字符
全称:Global Regular Expression Print
egrep:=grep -E(扩展的正则表达式),除了\< , \> , \b
使用其他正则都可以去掉
2.grep使用
1)格式
grep [option] pattern file
2)参数
- -A<显示行数>:除了显示符合范本样式的那一列之外,并显示该行之后的内容。
- -B<显示行数>:除了显示符合样式的那一行之外,并显示该行之前的内容。
- -C<显示行数>:除了显示符合样式的那一行之外,并显示该行之前后的内容。
- -c:统计匹配的行数
- -e :实现多个选项间的逻辑or 关系
- -E:扩展的正则表达式
- -f FILE:从FILE获取PATTERN匹配
- -F :相当于fgrep
- -i --ignore-case #忽略字符大小写的差别。
- -n:显示匹配的行号
- -o:仅显示匹配到的字符串
- -q: 静默模式,不输出任何信息
- -s:不显示错误信息。
- -v:显示不被pattern 匹配到的行,相当于[^] 反向匹配
- -w :匹配 整个单词
我最近比较常用的是
##反向匹配,简单来说就是去掉包括这个“xxx”字符串的行
grep -v "xxx"
二、正则表达式
- Linux中常用正则表达式类型:
POSIX 基本正则表达式(BRE)引擎
POSIX 扩展正则表达式(BRE)引擎 - 基本正则表达式
1)匹配字符
- . 匹配任意单个字符,不能匹配空行
- [] 匹配指定范围内的任意单个字符
- [^] 取反
- [:alnum:] 或 [0-9a-zA-Z]
- [:alpha:] 或 [a-zA-Z]
- [:upper:] 或 [A-Z]
- [:lower:] 或 [a-z]
- [:blank:] 空白字符(空格和制表符)
- [:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
- [:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
- [:digit:] 十进制数字 或[0-9]
- [:xdigit:]十六进制数字
- [:graph:] 可打印的非空白字符
- [:print:] 可打印字符
- [:punct:] 标点符号
实验忘记截图了,借用一下参考文章的图
2)配置次数
- 匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
- .* 任意长度的任意字符,不包括0次
- ? 匹配其前面的字符0 或 1次
- + 匹配其前面的字符至少1次
- {n} 匹配前面的字符n次
- {m,n} 匹配前面的字符至少m 次,至多n次
- {,n} 匹配前面的字符至多n次
- {n,} 匹配前面的字符至少n次
3)位置锚定
- ^ 行首锚定,用于模式的最左侧
- $ 行尾锚定,用于模式的最右侧
- ^PATTERN$,用于模式匹配整行
- ^$ 空行
- ^[[:space:]].*$ 空白行
- \< 或 \b 词首锚定,用于单词模式的左侧
- \> 或 \b 词尾锚定;用于单词模式的右侧
-
\<PATTERN\>
我用过的就是^和$
4)分组&向后引用
分组:\(\{\}) 将一个或多个字符捆绑在一起,当作一个整体进行处理
这些变量可\1,\2,\3来表示
向后引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
- \1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
- \2 表示从左侧起第2个左括号以及与之匹配右括号之间的模式所匹配到的字符,以此类推
-
& 表示前面的分组中所有字符