正则表达式与文本处理器

本文详细介绍了正则表达式的基本概念、元字符和用途,以及grep、sed和awk等Linux文本处理器的工作原理和常用命令。通过实例演示,帮助读者掌握这些工具在文本处理中的应用。
摘要由CSDN通过智能技术生成

目录

前言

一、正则表达式

1、概述

2、正则表达式组成

3、用途

4、分类

二、基础正则表达式元字符

1、特殊字符

2、定位符

3、非打印字符

三、扩展正则表达式

四、grep

1、查找特定字符

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

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

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

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

五、文本处理器

1、sed 

1.1  概述

1.2  工作原理

1.3  sed 命令常见用法

1.4  输出符合条件的文本

 1.5  删除符合条件的文本

1.6   替换符合条件的文本

1.7   迁移符合条件的文本

1.8  使用脚本编辑文件

1.9  sed 直接操作文件示例

2、awk

2.1  概述

2.2  工作原理

2.3  命令

2.4  按行输出文本

2.5  按字段输出文本

2.6  通过管道符号、双引号调用shell命令

3、 sort

4、uniq

5、tr

6、cut

总结


前言

  • 在 Linux/UNIX 系统中包含很多种文本处理器或文本编辑器,其中包括我们之前学习过的VIM 编辑器与 grep 等
  • grep,sed,awk 更是 shell 编程中经常用到的文本处理工具,被称之为 Shell 编程三剑客

一、正则表达式

1、概述

是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,简单来说,是一种匹配字符串的方法,通过一些特殊符号,实现快速查找、删除、替换某个特定字符串。正则表达式是由普通字符与元字符组成的文字模式。

2、正则表达式组成

普通字符:包括大小写字母、数字、标点符号及一些其他符号
元字符:指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式

3、用途

正在表达式对于系统管理员来说是非常重要的,系统运行过程中会产生大量的信息,这些信息有些事非常重要的,有些则只是告知的信息,身为系统管理员如果直接看这么多的信息数据,无法快速定位到重要的信息,如“用户登录失败”等信息,这是可以通过正则表达式快速提取有问题的信息,如此一来,可以将运维工作变得更佳简单、方便。

4、分类

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

二、基础正则表达式元字符

1、特殊字符

\:转义符,将特殊字符进行转义,忽略其特殊意义a\.b匹配a.b,但不能匹配ajb,.被转义为特殊意义\\\\
^:匹配行首,^则是匹配字符串的开始^tux匹配以tux开头的行^^^^
$:匹配行尾,$则是匹配字符串的结尾tux$匹配以tux结尾的行$$$$ 
.:匹配除换行符\n之外的任意单个字符,awk则中可以ab.匹配abc或bad,不可匹配abcd或abde,只能匹配单字符....
[list]:匹配list列表中的一个字符 例: go[ola]d,[abc]、[a-z]、[a-z0-9]
[^list]:匹配任意不在list列表中的一个字符 例: [^a-z]、[^0-9]、[^A-Z0-9]
*:匹配前面子表达式0次或者多次 例:goo*d、go.*d
\{n\} :匹配前面的子表达式n次,例:go\{2\}d、'[O-9]\{2\}'匹配两位数字
\{n,\}:匹配前面的子表达式不少于n次,例: go\{2,\}d、' [0-9]\{2,\}'匹配两位及两位以上数宁
\{n,m\}﹔匹配前面的子表达式n到m次,例: go\{2,3\)d、'[0-9]\{2,3\}'匹配两位到三位数字

2、定位符

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

3、非打印字符

\n 匹配一个换行符
\r 匹配一个回车符
\t 匹配一个制表符

三、扩展正则表达式

+:重复一个或者一个以上的前一个字符

egrep -n 'wo+d' test.txt
查询"wood" "woood" "woooooood"等字符串

?:零个或者一个的前一个字符

egrep -n 'bes?t' test.txt
查询“bet”“best”这两个字符串

|:使用或者(or)的方式找出多个字符

egrep -n 'of|is|on' test.txt
查询"of"或者"if"或者"on"字符串

():查找“组”字符串

egrep -n 't(a|e)st' test.txt
查询"tast"或者"test"字符串

()+: 辨别多个重复的组

egrep -n 'A(xyz)+C' test.txt
查询开头的"A"结尾是"C",中间有一个以上的"xyz"字符串

四、grep

 参数

-c :只输出匹配行的计数。

 -i :不区分大 小写(只适用于单字符)。

-h :查询多文件时不显示文件名。

 -l :查询多文件时只输出包含匹配字符的文件名。

 -n:显示匹配行及 行号。

-s :不显示不存在或无匹配文本的错误信息。

-v :排除,不显示过滤的字符串的行;显示不包含匹配文本的所有行。

-E :过滤多个字符串。

-o :输出精确匹配的字符而不是默认的整行。

1、查找特定字符

查找出特定字符“the”所在位置
grep -n 'the' test.txt

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

查找“shirt”与“short”这两个字符串
grep -n 'sh[io]rt' test.txt

查找包含数字的行
grep -n '[0-9]' test.txt

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

查询以“the”字符串为行首的行
[root@localhost ~]# grep -n '^the' test.txt
4:the tongue is boneless but it breaks bones.12!

查询不以字母开头的行
[root@localhost ~]# grep -n '^[^a-zA-Z]' test.txt
11:#woood # 12:#woooooood #

查询空白行
[root@localhost ~]# grep -n '^$' test.txt
10:

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

查找“w??d”的字符串
[root@localhost ~]# grep -n 'w..d' test.txt
5:google is the best tools for search keyword.

8:a wood cross!
9:Actions speak louder than words

查询包含至少两个 o 以上的字符串
[root@localhost ~]# grep -n 'ooo*' test.txt
3:The home of Football on BBC Sport online. 5:google is the best tools for search keyword. 8:a wood cross!
11:#woood # 12:#woooooood #
14:I bet this place is really spooky late at night!

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

查询以 w 开头以 d 结尾,中间包含 2~5 个 o 的字符串。
[root@localhost ~]# grep -n 'wo\{2,5\}d' test.txt
8:a wood cross! 11:#woood #

五、文本处理器

1、sed 

1.1  概述

sed(Stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行。sed 也可以在无交互的情况下实现相当复杂的文本处理操作ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值