Linux 文本处理工具
awk、grep、sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。
grep
命令格式:grep [option] pattern file
用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。
常用参数已加粗
- -A<显示行数>:显示匹配行之后的N行内容。
- -B<显示行数>:显示匹配行之前的N行内容。
- -C<显示行数>:显示匹配行之前后的N行内容。
- -c:统计匹配的行数
- -e:实现多个选项间的逻辑or 关系
- -E**:扩展的正则表达式**
- -f FILE:从FILE获取PATTERN匹配
- -F:相当于fgrep
- -i --ignore-case #忽略字符大小写的差别。
- -n:显示匹配的行号
- -o:仅显示匹配到的字符串
- -q:静默模式,不输出任何信息
- -s:不显示错误信息。
- -v**:显示不被**pattern** 匹配到的行,相当于[^]** 反向匹配
- -w:匹配 整个单词
正则表达式
字符匹配
.
任意单个字符[]
指定范围的字符[^]
不在指定范围的字符[: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:] 标点符号
次数匹配
*
匹配前面字符任意次?
匹配0 或1次+
匹配1 次或多次{m}
匹配m次{m,n}
匹配至少m ,至多n次
位置锚定
^
匹配行首$
匹配行尾\<, \b
匹配语首\>, \b
匹配语尾()
分组匹配\1, \2, ...
后向引用
分组: