Linux三剑客:grep、awk、sed

时间:2022-01-08 08:56:27

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

awk、grep、sed是linux操作文本的三大利器,合称文本三剑客。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。

1、grep

认识grep和egrep

grepGlobal Regular Expression Print)表示全局正则表达式版本,它的使用权限是所有用户。它能使用正则表达式搜索和过滤文本,并把匹配的行打印出来。

grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

egrepextend grep) = grep -E:扩展的正则表达式 (除了\< , \> , \b 使用其他正则都可以去掉\)

命令格式

grep [option] pattern file

命令参数

  • -A<显示行数>:除了显示符合范本样式的那一列之外,并显示该行之后的内容。
  •  -B<显示行数>:除了显示符合样式的那一行之外,并显示该行之前的内容。
  •  -C<显示行数>:除了显示符合样式的那一行之外,并显示该行之前后的内容。
  •  -c:统计匹配的行数
  •  -e :实现多个选项间的逻辑or 关系
  •  -E:扩展的正则表达式 (extend grep)
  •  -f :从FILE获取PATTERN匹配
  •  -F:相当于fgrep (fast grep)
  •  -i : #忽略字符大小写的差别。
  •  -l :列出文件内容符合指定的样式的文件名称。
  •  -n:显示匹配的行号
  •  -o:仅显示匹配到的字符串
  •  -q: 静默模式,不输出任何信息
  •  -r: 递归查找,包括当前目录和子目录
  •  -s:不显示错误信息。
  •  -v:显示不被pattern 匹配到的行,相当于[^] 反向匹配
  •  -w :匹配 整个单词

实例演示

# 递归查找部分匹配DoAdd函数的C/C++文件名
grep -lnr "DoAdd" * --include=*.c* 

# 在C/C++文件中递归查找部分匹配 grep.txt文件中的内容 或 DoReg 关键字的记录
grep -nrf grep.txt -e "DoReg"  --include=*.c*  *