Skip to content

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, ...后向引用

分组:

总访问量
总访问人数 人次