栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Shell编程之正则表达式与文本处理器

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Shell编程之正则表达式与文本处理器

Shell编程之正则表达式与文本处理器
  • 前言
  • 一、概述
  • 二、基础正则表达式
  • 三、扩展正则表达式
  • 四、grep命令
  • 五、元字符操作案例
    • (1)查找特定字符,显示行号
    • (2)查找特定集合字符
    • (3)查找行首与行尾字符
    • (4)查找任意字符与重复字符
    • (5)查找连续字符范围
  • 四、cut、sort、uniq、tr
    • (1)cut列截取工具
    • (2)sort排序工具
    • (3)uniq去重工具
    • (4)tr修改工具
    • (5)常用的组和用法
  • 总结

前言

正则表达式是对字符串操作的一种逻辑公式,通常被用来检索、替换那些符合某个规则的文本,在我们的实际工作中尤为重要。

一、概述
  • 通常用于判断语句中,用来检查某一字符串是否满足某一格式
  • 正则表达式是由普通字符与元字符组成
  • 普通字符包括大小写字母、数字、标点符号及一些其他符号
  • 元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式

Linux 中常用的有两种正则表达式引擎

  • 基础正则表达式:BRE
  • 扩展正则表达式:ERE
二、基础正则表达式

常配合使用的工具:grep、sed、awk(Linux三剑客)

元字符作用
转义字符,用于取消特殊符号的的含义例:!,n,$等
^匹配字符串开始的位置例:a,the,#,[a-z]
$匹配字符串结束的位置例:wordKaTeX parse error: Expected group after '^' at position 2: ,^̲匹配空行
.匹配除n之外的任何一个字符例:go.d , g…d
*匹配前面子表达式0次或者多次例:goo*d,go.*d
[list]匹配list列表中的一个字符例:go[loa]d,[a-z],[0-9]匹配任意一位数字
[^list]匹配任意非list列表中的一个字符例:[0-9],[a-z]匹配任意一位非小写字母
{n}匹配前面子表达式n次例:go{2}d,'[0-9]{2}'匹配两位数字
{n,}匹配前面子表达式不少于n次例:go{2,}d,'[0-9]{2,}'匹配两位及两位以上的数字
{n,m}匹配前面子表达式n到m次例:go{2,3}d,'[0-9]{2,3}'匹配两位到三位数字

注:egrep,awk使用{n}、{n,}、{n,m} 匹配时“{}”前面不用加“”
egrep -E -n ‘wo{2}d’ test.txt1/-E用于显示文件中符合条件的字符
egrep -E -n ‘wo{2,3}d’ test.txt

三、扩展正则表达式
元字符作用
+匹配前面子表达式一次以上例:go+d,将匹配至少一个o,如god,good,goood等
匹配前面子表达式0次或一次例:go?d,匹配将为gd或者god
()将括号内的字符创作为一个整体例:g(oo)+d,将匹配oo整体一次以上
|以或的方式匹配字符条串例:g(oo

定位符

  • ^ 匹配输入字符串开始的位置
  • $匹配输入字符串结尾的位置

非打印字符

  • n匹配一个换行符
  • r匹配一个回车符
  • t匹配一个制表符
四、grep命令

grep命令使用正则表达式来搜索文本,并且把匹配的文本打印出来

格式:
grep [options] pattern [file]
option表示选项,pattern表示匹配的模式。file表示一系列文件名。

-c只打印匹配的文本行的次数,不显示文本内容。
-i匹配时忽略字母大小写
-h当搜索多个文件,不显示匹配文件名前缀。
-l只列出含义匹配的文本行的文件的文件名,不显示其具体匹配的内容。
-n列出所有匹配的文本行,并显示行号
-s不显示关于不存在或无法读取文件的错误信息
-v只显示不匹配的文本行,反向选择,显示与搜索字符串不相符的行。
-w匹配整个单词
-x匹配整个文本行
-r递归搜索,不仅搜索当前目录,还有各级子目录
-E开启扩展(extend)的正则表达式
–color=auto可以将找到的关键词部分加上颜色的显示
  • 统计包含某个字符的文本行的行数

  • 不区分大小写查找指定字符所在行

  • 将非空行行写入到文件中

  • 过滤IP地址

五、元字符操作案例 (1)查找特定字符,显示行号

(2)查找特定集合字符

“[]”中无论有几个字符, 都仅代表一个字符,也就是说“[sh]”表示匹配“s”或者“h”其中任意一个字符。

  • 查找单个重复字符

  • 查找oo前不是r的字符串

  • 查找包含数字的行

(3)查找行首与行尾字符
  • 过滤出以root开头的行

  • “^”符号在元字符集合“[]”符号内外的作用是不一样的,在“[]”符号内表示反向选择,在“[]” 符号外则代表定位行首


  • 可以使用“$”定位符查找以某一特定字符结尾的行

  • 查询空白行

(4)查找任意字符与重复字符
  • 查找w开头d结尾的任意一个四位字符串

  • 查找“w”开头“d”结尾,且包含0个以上“o”的字符串

  • 查找“w”开头“d”结尾,包含任意字符的字符串

(5)查找连续字符范围
  • 查找带有固定个数以上的某字符的字符串

  • 查找带有范围数量某字符的字符串

四、cut、sort、uniq、tr (1)cut列截取工具
  • cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
  • 如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一
  • cut只擅长于处理单个字符为间隔的文本,-b只能分割字母,-c既可以分割字母也可以分割中文
-b按字节截取
-c按字符截取,常用于中文
-d指定分隔符截取。默认为制表符
-f通常和-d一起使用
  • 打印指定列

  • 查看指定位置字节

  • 查看指定位置字符

(2)sort排序工具

sort 是一个以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序。例如数据和字符的排序就不一样。

格式:sort [选项] 参数

-t指定分隔符,默认使用[Tab]键或空格分隔
-k指定排序区域,哪个区间排序
-n按照数字进行排序,默认是以文字形式排序
-u等同于 uniq,表示相同的数据仅显示一行,注意:如果行尾有空格去重就不成功
-r反向排序,默认是升序,-r就是降序
-o将排序后的结果转存至指定文件
-f忽略大小写,会将小写的字母都转换为大写字母来进行比较
-b忽略每行前面的空格
  • 按字母排序
    不加选项默认是字母排序,按a-z顺序排序

  • 按数字排序

  • 反向排序

  • 不输出结果,输出到指定文件

  • 去掉文件中重复的行

(3)uniq去重工具

主要用于去除连续的重复行
注意:是连续的行,所以通常和sort结合使用先排序使之变成连续的行再执行去重操作,否则不连续的重复行他不能去重

-c对重复的行进行计数
-d仅显示重复行
-u仅显示出现一次的行
  • 统计连续的重复行的次数

  • 结合sort使用过滤出重复行

  • 过滤出不重复的行

  • 结合sort使用,去重(与sort -u相同)
(4)tr修改工具
  • 它可以用一个字符来替换另一个字符,或者可以完全除去一些字符,也可以用它来除去重复字符。
  • 从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。

格式:tr [选项]… SET1 [SET2]

-d删除字符
-s删除所有重复出现的字符,只保留第一个
  • 将所有小写改成大写

  • 一一替换出现的对应字母

  • 可以使用特殊字符替换,也可以替换多个

  • 当遇到单引号,使用双引号

  • 删除所有o

  • 删除出换行符

  • 去重字符o,只保留一个

  • 去除空行

(5)常用的组和用法
  • 查看登录用户

  • 查看登陆过系统的用户

  • 查看登录ip和使用者个数

  • 查看客户端和监听服务个数

总结
  • 基础正则表达式的用法
  • 扩展正则表达式的用法
  • grep命令的使用方法
  • cut、sort、uniq、tr文本处理器的常用方式
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/868155.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号