正则表达式和grep、sed应用
正则表达式
又叫做正规表达式、常规表达式
定义:
使用单个字符串来描述,匹配一系列符合某个句法规则的字符串,即是一种匹配字符串的方法,通过一些特殊的符号,实现快速查找、删除、替换某个特定的字符节
组成:
普通字符:大小写字母、数字、标点符号及一些其他符号
元字符:在正则表达式中具有特殊意义的字符
正则表达式的层次:基础正则表达式、扩展正则表达式
基础正则表达式元字符
:转义字符, (让具有特殊意义的元字符作为普通字符去使用)
例如:\!(!),\n(换行)等
^ :匹配字符串开始的位置 (以…开始)例如:^ a,^ the,^#
$ :匹配字符串结束的位置 (以…结束)例如:word$
.:匹配除\n之外的任意的一个字符
例如:go.d,go…d (以g开头,d结尾,中间包括两个字符内容)
:匹配前面子表达式0次或者多次
例如:good(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的内容
过滤不包含the的内容
过滤以e开头,以e结尾,中间匹配x或s过滤l出现两次以上的
过滤ll前面不是a的内容
过滤包含数字0-9的内容与不包含数字0-9的内容
过滤以P为开头的内容和以A-Z为开头的内容过滤以:结尾的内容
过滤空白行
过滤w开头,以d结尾中间是任意两个字符的内容
过滤查找至少两个a的内容
匹配以w开头,d结尾,中间任意字符可重复0次或多次的内容
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
输出指定行数
输出奇数行和偶数行
输出指定行数的奇偶行
输出指定行到结尾的奇数行
.输出包含the的内容
输出以P为开头的内容;以0到9数字为结尾的内容
输出包含单词sudo的行(<> 代表单词边界)
删除文本
删除第五行和2-3行
删除包含sudo的行
删除以#结尾的行
替换文本
使用sed命令进行替换操作时需要用到s(字符串替换),c(整行/整块替换),y(字符替换)命令选项
将每行中的第一个#替换为@
将所有etc替换为ETC
将每行中的第2个l替换为L
将文件中所有#替换为空
在每行行首插入@
在每行行尾插入字符串GG在包含sudo的行行首插入@
将包含sudo的所有行中的o替换为O
迁移文本
在使用sed命令迁移符合条件的文本时,常用到以下参数
H:复制到剪切板
g,G :将剪切板中的数据覆盖/追加至指定行
w:保存为文件
r:读取指定文件
a:追加指定内容
将包含P的行迁移至文件末尾,{;}用于多个操作
将第1-4行内容转移至第5行后
将包含sudo的行另存为文件sdo.txt
将文件/root/1.txt的内容添加到包含sudo的每行以后
在第三行前面插入一个新行,内容为New
在包含sudo的每行后插入一个新行,内容为New
在文件最后结尾后插入一个新行,内容为New
在第三行后插入一个新行,内容为New1,后换行插入一个新行,内容为new2
\n 换行符,是另起一新行(光标换行)
\r 回车符,光标回到一旧行的开头(覆盖前一个)
使用脚本编辑文件
编写一个脚本,用来调整vsftpd 服务配置,要求禁止匿名用户,但允许本地用户(也允许写入)
ftp访问