美文网首页LinuxLinux World@IT·互联网
Unix & Linux的文本处理工具 -- grep,

Unix & Linux的文本处理工具 -- grep,

作者: 点融黑帮 | 来源:发表于2016-12-05 17:49 被阅读468次

当大家看到标题时脑中闪过的大概是铺天盖地baidu, google出来的冗余的各类使用介绍,老生常谈希望能让大家对这三个文本工具有新的理解。

1、grep

grep不做过多的介绍, 打印出匹配的行, 着重点在于输出结果并不对文本本身做修改。

有个关于grep的小故事, 从sed和grep能追溯到最初的unix行编辑器ed而grep的命名代表 g(全局)/re(正则表达式)/p(打印)正是ed中全局打印行匹配的语法. grep自身的劣势在于无法实现多行匹配, 这时sed和awk相继出现弥补了grep的不足。

2、sed和awk的比较

在进入sed的相关讨论之前,先就sed跟awk之间进行简单的比较。

1. 相似性

可使用指定的脚本文件对相应文本进行编辑。

sed -f 'script filename' or stdin

awk -f 'script filename' or stdin

默认全局匹配并且拥有自身的主输入循环。

除去影响控制流的命令或语句(sed中: t,b; awk中continue,break等)默认对文本的每一读取的行依次执行相应的命令或语句。

2. 优劣性

awk相较于文本编辑工具更像是一门语言,awk条件、循环、判断语句有显性的标识(if,while,for...);而sed只存在单一的判断逻辑(参考b label,t label)。

(采用nginx的配置文件格式)

取出upstream awk_test对应的配置块:

Solution1:

Solution2:

相较之下Solution 2不需要复杂的判断,只需通过寻址来匹配并打印相应的文本;Solution 1更适合于进行多行匹配并替换。另一方面,Solution 1中sed通过创建多行空间模式并输出,而awk通过修改记录分隔符来实现多行匹配的不同。

awk拥有系统变量(FS,RS,OFS,ORS...)、内置函数、数组数据结构、传参(-v var=value)、引用系统命令(通过system() getline() close()函数)等。

awk除去主输入循环还存在BEGIN和END过程,用于某些在处理输入之前或者处理输入完成之后的操作。

sed也有过人之处,如果对sed的工作模式进行深入了解,会发现有一个叫做保持空间(hold space)的东西,下图大体描述了sed的工作模式,并且阐述了模式空间(pattern space)跟保持空间(hold space)之间的联系。模式空间跟保持空间中的内容可进行删除,交换等。

sed的指令集都是单一的字母,并且有option可直接修改文件。而awk可能需要指定内置变量的值,或是通过输出重定向保存为新的文件。

结语

综上所述:

grep适用于单行匹配打印的场景;

sed适用于多行模式的替换的场景;

awk适合更多的逻辑表达式并输出的场景。

但三个命令都需要文本格式统一化的大前提,对于一个文本中的多种格式,可以先将同一种格式的内容整理到文件中,再将其他格式再分别整理到新的文件中。

统一文本格式固然重要,能准确匹配意图的正则表达式也必不可少,这也是大家头疼的部分。如若有机会,我会再跟大家介绍文本匹配中磨人的小妖精——正则表达式。它在不同的命令中、语言中支持不同的标准,更易于与Unix-like系统的file globbing混淆,常常让人咬牙切齿,欲罢不能。

本文作者:王严(点融黑帮),隶属于点融Infra团队的devops组的运维攻城狮,欢迎各种姿势交流。

相关文章

  • Unix & Linux的文本处理工具 -- grep,

    当大家看到标题时脑中闪过的大概是铺天盖地baidu, google出来的冗余的各类使用介绍,老生常谈希望能让大家对...

  • Grep

    Linux文本处理三剑客 grep:文本过滤(模式:pattern)工具grep, egrep, fgrep(不支...

  • note_6.3_grep命令与基本正则表达式

    文本处理工具 Linux上文本处理三剑客:  grep,egrep, fgrep:文本过滤工具(模式:patter...

  • grep 及正则表达式

    Linux 上文本处理三剑客 grep:文本过滤(模式:pattern)工具grep(基本匹配),egrep(扩展...

  • 关于grep命令的一个小坑

    在Linux文本中有三个文本处理工具分别是: grep:文本过滤(模式:pattern)工具 gre...

  • grep常用选项

    grep是Linux中最常用的文本处理工具之一,与sed,awk合称Linux中的三剑客。grep的全称是:Glo...

  • 简谈linux文本处理-sed

    文本处理能力是Linux强大优势之一,其中grep,sed和awk被称为Linux文本处理三板斧。grep 主要配...

  • Linux上文本处理三剑客grep及正则表达式

    Linux上文本处理三剑客: grep, egrep, fgrep:文本过滤工具,通过(模式:pattern)过滤...

  • awk

    awk的简介和功能 awk: Linux 文本处理三剑客:grep、sed和awk。其中grep是一种文本过滤工具...

  • grep

    [翻译] grep command in Unix/Linux grep (gloabally search fo...

网友评论

  • 左蓝:想看更深入的举例分析,最好是那种眼前一亮的例子,笑。

本文标题:Unix & Linux的文本处理工具 -- grep,

本文链接:https://www.haomeiwen.com/subject/huqlmttx.html