正则表达式和grep、sed应用

正则表达式

又叫做正规表达式、常规表达式

定义:

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

组成:

普通字符:大小写字母、数字、标点符号及一些其他符号
元字符:在正则表达式中具有特殊意义的字符
正则表达式的层次:基础正则表达式、扩展正则表达式

基础正则表达式元字符

:转义字符, (让具有特殊意义的元字符作为普通字符去使用)
例如:\!(!),\n(换行)等
^ :匹配字符串开始的位置 (以…开始)例如:^ a,^ the,^#
$ :匹配字符串结束的位置 (以…结束)例如:word$
.:匹配除\n之外的任意的一个字符
例如:go.d,go…d (以g开头,d结尾,中间包括两个字符内容)
:匹配前面子表达式0次或者多次
例如:goo
d(god,good,goood…),go.*d(god,goad,gord…)
[list] :匹配list列表中的一个字符 例如:go[ola]d,[abc],[a-z],[a-z0-9]
[ ^list] :匹配任意不在list列表中的一个字符 (排除在外,不匹配)
例如:[ ^a-z],[ ^0-9],[ ^A-Z0-9]
{n,m}:匹配前面的子表达式n到m次,有{n},{n,},{n,m}三种格式例如:go{2}d(o出现2次),go{2,3}d(o出现至少2次,最多3次),go{2,}d(o出现2次或者2次以上)

grep应用

使用规则

-n:表示显示行号
-i:表示不区分大小写
-v:表示反向过滤
[ ] : 查找集合字符

用法示例

过滤包含the的内容
正则表达式和grep、sed应用
过滤不包含the的内容
正则表达式和grep、sed应用
过滤以e开头,以e结尾,中间匹配x或s
正则表达式和grep、sed应用过滤l出现两次以上的
正则表达式和grep、sed应用
过滤ll前面不是a的内容
正则表达式和grep、sed应用
过滤包含数字0-9的内容与不包含数字0-9的内容
正则表达式和grep、sed应用
正则表达式和grep、sed应用
过滤以P为开头的内容和以A-Z为开头的内容
正则表达式和grep、sed应用
正则表达式和grep、sed应用过滤以:结尾的内容
正则表达式和grep、sed应用
过滤空白行
正则表达式和grep、sed应用
过滤w开头,以d结尾中间是任意两个字符的内容
正则表达式和grep、sed应用
过滤查找至少两个a的内容
正则表达式和grep、sed应用
匹配以w开头,d结尾,中间任意字符可重复0次或多次的内容
正则表达式和grep、sed应用

sed的应用

定义

sed (Stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除替换,添加,移动等),最后输出所有行或者仅输出处理的某些行。

工作流程

sed的工作流程主要包括读取,执行和显示三个过程。

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

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

显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。
在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

注意:默认情况下所有的sed命令都是在模式空间内执行的,由此输入的文件并不会发生任何变化,除非是用重定向存储输出。

用法

sed [选项] ‘操作’ 参数
sed [选项] -f scriptfile 参数

常见选项

-e script(脚本命令) : 指定sed编辑命令
-f scriptfile(文件) : 指定的文件中是sed编辑命令
-h 或 --help :显示帮助
-n,–quiet 或 silent :表示仅显示处理后的结果
-i :直接编辑文本文件(会对文件产生变化)

应用实例

带行号输出所有内容 等同于 cat test.txt
正则表达式和grep、sed应用
输出指定行数
正则表达式和grep、sed应用
输出奇数行和偶数行
正则表达式和grep、sed应用
正则表达式和grep、sed应用
输出指定行数的奇偶行
正则表达式和grep、sed应用
输出指定行到结尾的奇数行
正则表达式和grep、sed应用
.输出包含the的内容
正则表达式和grep、sed应用
输出以P为开头的内容;以0到9数字为结尾的内容
正则表达式和grep、sed应用
输出包含单词sudo的行(<> 代表单词边界)
正则表达式和grep、sed应用

删除文本

删除第五行和2-3行
正则表达式和grep、sed应用
正则表达式和grep、sed应用
删除包含sudo的行
正则表达式和grep、sed应用
删除以#结尾的行
正则表达式和grep、sed应用

替换文本

使用sed命令进行替换操作时需要用到s(字符串替换),c(整行/整块替换),y(字符替换)命令选项

将每行中的第一个#替换为@
正则表达式和grep、sed应用
将所有etc替换为ETC
正则表达式和grep、sed应用
将每行中的第2个l替换为L
正则表达式和grep、sed应用
将文件中所有#替换为空
正则表达式和grep、sed应用
在每行行首插入@
正则表达式和grep、sed应用
在每行行尾插入字符串GG
正则表达式和grep、sed应用在包含sudo的行行首插入@
正则表达式和grep、sed应用
将包含sudo的所有行中的o替换为O
正则表达式和grep、sed应用

迁移文本

在使用sed命令迁移符合条件的文本时,常用到以下参数
H:复制到剪切板
g,G :将剪切板中的数据覆盖/追加至指定行
w:保存为文件
r:读取指定文件
a:追加指定内容
将包含P的行迁移至文件末尾,{;}用于多个操作
正则表达式和grep、sed应用
将第1-4行内容转移至第5行后
正则表达式和grep、sed应用
将包含sudo的行另存为文件sdo.txt
正则表达式和grep、sed应用
将文件/root/1.txt的内容添加到包含sudo的每行以后
正则表达式和grep、sed应用
在第三行前面插入一个新行,内容为New
正则表达式和grep、sed应用
在包含sudo的每行后插入一个新行,内容为New
正则表达式和grep、sed应用
在文件最后结尾后插入一个新行,内容为New
正则表达式和grep、sed应用
在第三行后插入一个新行,内容为New1,后换行插入一个新行,内容为new2
正则表达式和grep、sed应用
\n 换行符,是另起一新行(光标换行)
\r 回车符,光标回到一旧行的开头(覆盖前一个)

使用脚本编辑文件

正则表达式和grep、sed应用
正则表达式和grep、sed应用编写一个脚本,用来调整vsftpd 服务配置,要求禁止匿名用户,但允许本地用户(也允许写入)
正则表达式和grep、sed应用

正则表达式和grep、sed应用
ftp访问
正则表达式和grep、sed应用