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

1. 正(基础)则表达式概念

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

基础正则表达式是常用正则表达式最基础的部分,在 Linux 系统中常见的文件处理工具中 grep 与 sed 支持基础正则表达式,而 egrep 与 awk 支持扩展正则表达式

2. 正则表达式grep

-a 不要忽略二进制数据

-A 除了显示符合范本样式的那一行之外,并显示该行之后的内容

-b 在显示符合范本样式的那一行之外,并显示该行之前的内容

-c 计算符合范本样式的列数

-C或-  除了显示符合范本样式的那一列之外,并显示该列之前后的内容

-d 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作,-e 指定字符串作为查找文件内容的范本样式

-E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式

-f 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式

-F 将范本样式视为固定字符串的列表

-G 将范本样式视为普通的表示法来使用

-h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称

-H 在显示符合范本样式的那一列之前,标示该列的文件名称

-i 忽略字符大小写的差别

-l 列出文件内容符合指定的范本样式的文件名称

-L 列出文件内容不符合指定的范本样式的文件名称

-n 在显示符合范本样式的那一列之前,标示出该列的编号

-q 不显示任何信息

-R/-r 此参数的效果和指定“-d recurse”参数相同

-s 不显示错误信息

-v 反转查找

-w 只显示全字符合的列

-x 只显示全列符合的列

-y 此参数效果跟“-i”相同

-o 只输出文件中匹配到的部分

3. 查找特定字符

(1)查看包含the的行

(2)利用[ ]查找集合字符

(3)查找字母oo前不是字母w的内容

(4)查看字母oo前不是小写字母的内容

4. 查找行首与行位

(1)查看以the为行首的行

(2)查询以小写字母开头的行

(3)查询以大写字母开

(4)查看以非字母开头的行

(5)查看以点结尾的行

(6)查询空行(非空行)

5. 查找任意字符和重复字符

(1)查找包含四字符的单词的行,单词以w开头,以d结尾

(2)查询至少包含两个字母o(oo)字符串的行

(3)查找行,行中单词包含w开头和d结尾,中间至少一个字母o

(4)查询以w开头,d结尾,中间字符可有可无

(5)查询包含数字的行

6. 文本处理器sed

sed(Stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据 指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输 出处理的某些行。sed 也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用 于 Shell 脚本中,用以完成各种自动化处理任务。 sed 的工作流程主要包括读取、执行和显示三个过程

读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)

执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命令将会在所有的行上依次执行

显示:发送修改后的内容到输出流,在发送数据后,模式空间将会被清空

7. sed常用选项

-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来

-e :直接在命令列模式上进行 sed 的动作编辑

-f :直接将 sed 的动作写在一个文件内

-f filename 可以运行 filename 内的 sed 动作

-r :sed 的动作支持的是延伸型正规表示法的语法(默认是基础正规表示法语法)

-i :直接修改读取的文件内容,而不是输出到终端

8. sed常用操作

a :新增行, a 的后面可以是字串,而这些字串会在新的一行出现(目前的下一行)

c :取代行, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行

d :删除行,因为是删除,所以 d 后面通常不接任何参数,直接删除地址表示的行;

i :插入行, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);

p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行

s :替换,可以直接进行替换的工作,通常s 的动作可以搭配正规表示法,1,20s/old/new/g 一般是替换符合条件的字符串而不是整行

y:字符转换

9. 文本处理器awk及常见用法

awk 是一个功能强大的编辑工具,逐行读取输入文本,并根据指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理

$0           表示整个当前行

$1           每行第一个字段

NF          字段数量变量

NR          每行的记录号,多文件记录递增

FNR        与NR类似,不过多文件记录不递增,每个文件都从1开始

\t            制表符

\n           换行符

FS          BEGIN时定义分隔符

RS       输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)

~            匹配,与==相比不是精确比较

!~           不匹配,不精确比较

==         等于,必须全部相等,精确比较

!=           不等于,精确比较

&&      逻辑与

||             逻辑或

+            匹配时表示1个或1个以上

/[0-9][0-9]+/   两个或两个以上数字

/[0-9][0-9]*/    一个或一个以上数字

FILENAME 文件名

OFS      输出字段分隔符, 默认也是空格,可以改为制表符等

ORS        输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕

-F'[:#/]'   定义三个分隔符

10. sort 工具

在 Linux 系统中,常用的文件排序工具有三种:sort、uniq、wc,本章将介绍前两种工具的用法

sort 是一个以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序,如数据和字符的排序就不一样,sort 命令的语法为sort [选项] 参数

-f:忽略大小写;

-b:忽略每行前面的空格;

-M:按照月份进行排序;

-n:按照数字进行排序;

-r:反向排序;

-u:等同于 uniq,表示相同的数据仅显示一行;

-t:指定分隔符,默认使用[Tab]键分隔;

-o: :将排序后的结果转存至指定文件;

-k:指定排序区域

11. uniq工具

Uniq 工具在 Linux 系统中通常与 sort 命令结合使用,用于报告或者忽略文件中的重复行,具体的命令语法格式为:uniq [选项] 参数

-c:进行计数;

-d:仅显示重复行;

-u:仅显示出现一次的行

12. tr工具

tr命令常用来对来自标准输入的字符进行替换、压缩和删除,可以将一组字符替换之后变成另一组字符,经常用来编写优美的单行命令,作用很强大

-c:取代所有不属于第一字符集的字符

-d:删除所有属于第一字符集的字符

-s:把连续重复的字符以单独一个字符表示

-t:先删除第一字符集较第二字符集多出的字符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值