正则表达式与文本处理器

目录

正则表达式

概述

基础正则表达式

查找特定字符

利用中括号 “ [] ” 来查找集合字符

查找行首 “ ^ ” 与行尾字符 “ $ ”

查找任意一个字符 “ . ” 与重复字符 “ * ” 

查找连续字符范围 “ {} ”

元字符总结

元字符

作用

文本处理器

sed 工具

1. sed 命令常见用法

awk 工具

1. awk 常见用法

sort 工具


正则表达式

概述

  • 正则表达式又称正规表达式、常规表达式。在代码中常简写为 regex、regexp RE
  • 简单来说,是一种匹配字符串的方法,通过一些特殊符号,实现快速查找、删除、替换某个特定字符串。
  • 正则表达式是由普通字符与元字符组成的文字模式。模式用于描述在搜索文本时要匹配的一个或多个字符串。

基础正则表达式

  • 查找特定字符

其中 “ -n ” 表示显示行号,“ -i ” 表示不区分大小写


若反向查找,可以使用 grep 命令的 “ -v ” 选项实现,配合 “ -n ” 一起使用显示行号


  • 利用中括号 “ [] ” 来查找集合字符

想要査找"shirt""short"这两个字符串时,可以发现这两个字符串均包含"sh""rt”。此时执行以下命令即可同时查找到"shirt""short"这两个字符串


若要查找包含重复单个字符 “oo” 时,只需要执行以下命令即可


若查找“00"前面不是“w"的字符串,只需要通过集合字符的反向选择 “[^]" 来实现该目的例如执行 “grep -n'[^w]joo'test.txt”" 命令表示在 test.txt 文本中查找“00”前面不是"w"的字符串。


  • 查找行首 “ ^ ” 与行尾字符 “ $ ”

基础正则表达式包含两个定位元字符 :  “ ^ ” (行首) “ $ ” (行尾)


查询以小写字母开头的行可以通过“^[a-z]"规则来过滤,查询大写字母开头的行则使用“^[A-Z]”规则,若查询不以字母开头的行则使用“^[^a-zA-Z]”规则。


  • 查找任意一个字符 “ . ” 与重复字符 “ * ” 

以下命令就可以查找“w??d”的字符串,即共有四个字符,以 w开头 d结尾。


查询以w开头d结尾,中间包含至少一个0的字符串,执行以下命令即可实现。 


执行以下命令即可查询以w开头d结尾,中间的字符可有可无的字符串。 


执行以下命令即可查询任意数字所在行 


  • 查找连续字符范围 “ {} ”

1. 查询两个o的字符。


2. 查询以w开头以d结尾,中间包含2~5个o的字符串。


3. 查询以w开头以d结尾,中间包含2个或2个以上o的字符串。


元字符总结

元字符

作用

^匹配输入字符串的开始位置。除非在方括号表达式中使用,表示不包含该字符集合。要匹配 "^” 字符本身,请使用 “ \^ ”
$匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 “$” 也匹配 'n' 或 'r' 。要匹配 “$” 字符本身,请使用 “$” 
.匹配除 "\r\n" 之外的任何单个字符
\反斜杠,又叫转义字符,去除其后紧跟的元字符或通配符的特殊意义
*匹配前面的子表达式零次或多次。要匹配 “*” 字符,请使用 “\*”
[]字符集合。匹配所包含的任意一个字符。例如,“[abc]" 可以匹配“plain" 中的 “ a ”
[^]赋值字符集合。匹配未包含的一个任意字符。例如,“[^abc]" 可以匹配 "plain" 中任何一个字母
[n1-n2]字符范围。匹配指定范围内的任意一个字符。例如, “[a-z]" 可以匹配“a" 到 "z" 范围内的任意一个小写字母字符。
注意:只有连字符 ( - ) 在字符组内部,并且出现在两个字符之间时,才能表示字符的范围:如果出现在字符组的开头,则只能表示连字符本身
{n}n 是一个非负整数,匹配确定的 n 次。例如,“o{2,}" 不能匹配 “Bob" 中的 "o”,但是能匹配 "food" 中的 “oo”
{n,}n 是一个非负整数,至少匹配 n 次。例如,“o{2,}" 不能匹配 “Bob" 中的 “o”,但能匹配 “foooood" 中的所有 0。“o{1,}" 等价于 “o+”。“o{0,}”则等价于 “o*”
{n,m}m 和 n 均为非负整数,其中 n<=m,最少匹配 n 次且最多匹配 m 次

文本处理器

grep,sed,awk 更是 Shell 编程中经常用到的文本处理工具,被称之为 Shell 编程三剑客。

sed 工具

  • sed (Stream EDitor) 是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑 (删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行。sed 也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于 Shell 脚本中,用以完成各种自动化处理任务。
    • sed 的工作流程主要包括读取、执行和显示三个过程
      • 读取:sed 从输入流 (文件、管道、标准输入) 中读取一行内容并存储到临时的缓冲区中 (又称模式空间,pattern space)
      • 执行:默认情况下,所有的sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命令将会在所有的行上依次执行。
      • 显示:发送修改后的内容到输出流。在发送数据后,式空间将会被清空。

1. sed 命令常见用法

通常情况下调用 sed 命令有两种格式。"参数”是指操作的目标文件,当存在多个操作对象时用,文件之间用逗号“,"分隔; 而 scriptfile 表示脚本文件,需要用 “-f” 选项指定,当脚本文件出现在目标文件之前时,表示通过指定的脚本文件来处理输入的目标文件。

  • 常见的 sed 命令选项主要包含以下几种。
    • -e 或 --expression=:表示用指定命令或者脚本来处理输入的文本文件。
    • -f 或 --file=:表示用指定的脚本文件来处理输入的文本文件。
    • -h 或--help:显示帮助。
    • -n、--quiet 或 silent:表示仅显示处理后的结果。
    • -i:直接编辑文本文件。 

awk 工具

awk 是一个功能强大的编辑工具,逐行读取输入文本,并根据指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互的情况下实现相当复杂的文本操作,被广泛应用于 Shel 脚本,完成各种自动化配置任务。

1. awk 常见用法

通常情况下 awk 所使用的命令格式如下所示,其中,单引号加上大括号“”用于设置对数据进行的处理动作。awk 可以直接处理目标文件,也可以通过 “ -f " 读取脚本对目标文件进行处理。

  • awk 包含几个特殊的内建变量(可直接用)
    • FS:指定每行文本的字段分隔符,默认为空格或制表位。
    • NF:当前处理的行的字段个数。
    • NR:当前处理的行的行号(序数)。
    • $0:当前处理的行的整行内容。
    • $n:当前处理行的第n个字段 ( 第 n 列 )
    • FILENAME:被处理的文件名。

sort 工具

在 Linux 系统中,常用的文件排序工具有三种:sort、unig、wc 。本章将介绍前两种工具的用法。
sort 是一个以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序。例如数据和字符的排序就不一样。

  • sort 命令的语法为 "sort [选项] 参数”,其中常用的选项包括以下几种。
    • -f:忽略大小写;
    • -b:忽略每行前面的空格;
    • -M:按照月份进行排序;
    • -n:按照数字进行排序:
    • -r:反向排序;
    • -u:等同于 unig,表示相同的数据仅显示一行;
    • -t:指定分隔符,默认使用 [Tab] 键分隔;
    • -o <输出文件>:将排序后的结果转存至指定文件;
    • -k:指定排序区域。

  • 44
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值