ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

grep、sed 和 awk 文本三剑客

2021-11-03 23:04:02  阅读:144  来源: 互联网

标签:搜索 grep sed awk 匹配 文本 三剑客


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

标签:搜索,grep,sed,awk,匹配,文本,三剑客
来源: https://www.cnblogs.com/ccl971123/p/15506136.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有