1.什么是正则表达式
正则表达式,又称为规则表达式,在代码中常简写为regex,regexp或RE,计算机科学的一个概念 正则表达式通常被用来检索,替换那些符合某个模式(规则)的文本 许多程序设计语言都支持利用正则表达式进行字符串操作,例如在Perl内建了一个功能强大的正则表达式引擎 正则表达式这个概念最初是由Unix中的工具软件,例如sed和grep普及开的 正则表达式常缩写成regex,单数由regexp,regex,复数有regexps,regexes,regexen 正则表达式是对字符串操作的一种逻辑公式,用事先定义好的特定字符,及这些特定字符的组合组成一个规则字符串 这个规则字符串用来表达对字符串的一种过滤逻辑
grep文本过滤器命令
grep的工作方式:在一个或多个文件中搜索字符串模板 如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名,搜索的结果被送到屏幕,grep可用于shell脚本,如果模板搜索成功返回0,不成功返回1,搜索文件不存在返回2,我们可以利用返回值做一些自动化的文本处理工作
grep的格式 (贪婪模式的匹配)
grep 匹配条件 处理文件
将/etc/passwd 移动到/mnt下
删除后面的内容
grep root passwd 搜索全文中的root
grep ^root 过滤以root开头
grep bash$ 过滤以bash结尾
grep -i root passwd 忽略大小写
grep -E “root | ROOT" passwd 同时匹配多个条件 相当于egrep使grep扩展,可识别扩展字符
grep -E "root|bash" passwd 搜索同时包含root和bash的行
grep属于贪婪模式的搜索和匹配,只要行中由root的出现,它就会打印匹配行,除非指定开头和结尾
grep不可以直接加两个条件
grep -E 就可以加两个条件,不加E的话就过滤两次,例:过滤root开头且bash结尾的行
grep -i root passwd -v 表示打印与匹配条件相反的行,除了root(忽略大小写)其他的行
cat passwd 查看passwd文件并显示行号
cat -b passwd | grep lp 过滤并查看含lp的行
cat -b passwd | grep lp -2 打印匹配行以及匹配行的上下两行
cat -b passwd | grep lp -A2 打印匹配行以及匹配行后两行
cat -b passwd | grep lp -B2 打印匹配行以及匹配行前两行
grep中的正则表达式
写入实验内容
^westos打印以westos开头的行 westos$打印以westos结尾的行 grep 'w....s'打印w和s中间包括四个字符的行
grep 'w....'打印w开头后面4个字符的行
grep '....s' 打印s结尾前面4个字符的行
grep ws 打印ws的行
grep中字符的匹配次数设定
编辑测试文件
*字符出现0-任意次,打印ab或者ab之间由0-多个任意字符的行
\?字符出现0-1次 打印b前,出现0-1次a
\+字符至少出现1次
\{n\} 字符出现n次 打印b前面a出现两次的行
|{m,n\} 字符最少出现m次,最多出现n次 打印b前a至少出现2次,最多出现3次的行
\{0,n\}字符出现至少0-n次 打印b前a至少出现0-2次的
\{m,\}字符出现至少m次 打印b前a至少出现过2次的行
(xy\)\{n\}xy 关键字出现n次 ab出现4次
.*关键字之间匹配任意字符 a和b之间出现0-多个字符的行
a*b 打印b前面由0-多个a的行
grep中字符的匹配位置设定
^ 关键字 寻找以什么开头的关键字
关键字 $ 寻找以什么结尾的关键字
\< 关键字 以root开头的两边必须是符号或者空的行
关键字 \> 以bash结尾两边必须是符号或者单词空格的行
\<关键字\> 匹配包含bash,bash两边必须是符号或者单词空格的行
==grep 正则表达式与扩展正则表达式
正规的grep不支持扩展正则表达式,|是用于表示或的扩展正则表达式字符,正规的grep无法识别 加上\这个字符就被转译成扩展正则表达式,就像egrep
sed行编辑器
1.sed命令的概念
sed是一项Linux指令,功能通awk类似,差别在于sed简单,对列处理的功能要差一些,awk功能复杂,对列处理的功能比较强大 sed来操作纯ASCII码的文本处理时,把当前处理的行储存在临时缓冲区,称为模式空间,可以指定仅仅处理哪些行 sed符合条件的处理,不符合条件的不处理,处理完后就把缓冲区的内容送至屏幕 接着处理下一行,这样不断重复,直到文件末尾 原来的内容是在磁盘中放着,现在用sed处理就相当于内容掉入内存的一个地方用户处理,这个处理空间就叫模式空间
sed命令格式
调用sed命令由两种形式
sed [options] 'command' file sed [options] -f scriptfile file
sed对字符的处理
p | 显示 |
---|---|
d | 删除 |
a | 添加 |
c | 替换 |
w | 写入 |
i | 插入 |
p模式操作 (按要求显示行)
cp /etc/fstab . cat -n fstab 显示空行
cat -n fstab | sed 5p 显示第五行并且在原来文件也显示
> cat -n fstab | grep 3,5p 显示3-5行并且原来的文件也显示
cat -n fstab | sed -n 3,5p 只显示模式空间的内容,不显示原来的文件内容
cat -n fstab | sed -n '3p;5p' 只显示模式空间的3,5行
显示包括#的行
显示不包括#的行
显示空行
显示非空行
显示非空行并且不是以#开头的行
d模式操作
删除#开头的行并且其余的行都显示
删除第五行,并显示其他的行
删除第三行和第五行
删除UUID开头的行
a模式操作 (按照要求添加)
在以UUID开头的行下面加入hello linux
在以UUID开头的行下面加入hello linux
== i模式操作 (按要求插入)
在第四行下面加入hello行linux行
在第四行位置插入hello行 linux行
c操作模式 (按要求改变行)
把#开头的行全部变成westos
把#开头的行全变成westos然后把结果插入fstab中
w模式操作 按要求写入行
将UUID开头的内容写入file文件
sed其他用法
显示以UUID开头的行是第几行,并且不输出原文
不但显示第几行,还显示原文
显示一共有多少行,且输出原文内容
将test中的内容加到fstab文件中的第六行下 vim test
把test中的内容加到fstab的结尾
cat test > fstab 直接导入会覆盖fstab原来的内容
sed '$r test' fstable -i 修改fstable中的内容
awk报告生成器
awk处理机制:awk会逐行处理文本,支持在处理第一行之前做一些准备工作,以及在处理完最后一行做一些总结性的工作,然后将结果展现给用户
在命令格式上分别体现如下: BEGIN{}:读第一行文本前执行,一般用来初始化操作 {}:逐行处理,逐行读如文本执行相应的处理,是最常见的编辑指令 END{}:处理完最后一行文本之后执行,一般用来输出处理
awk是一个优良的文本处理工具,Linux及Unix环境中现有的最强的数据处理引擎之一 用命令可以查看正在应用的awk来源 ls -l /bin/awk
linux上默认适用的是gawk,其余的还有nawk。
awk的基本用法
复制/etc/passwd 到/mnt中 删除掉后面的行数,只留前面
指定分隔符,打印passwd文件以:为分隔符的第一列字符
打印第一列和第一列,不出现:分割符
打印第2列
打印第二列,并且在最前面加上linux,在最后面加上westos
在第二列后面均写上1
打印第二列,并且编号
把编号写在第一列前面
在第一列前面加上编号,并且在底下写入END
在passwd结尾输出行数
在passwd结尾处输入列数
输出包含bash行的第一个字符
passwd第三行
passwd 3456行
passwd4和6行
passwd输出文件名字,有多少行输出多少次
passwd输出行
输出a+12的值
输出以a-d开头的行
输出不是以a-d开头的行
输出以root开头且以bash结尾的行
输出以r开头或者以bash结尾的行
打印第六列含有bin的行
打印第六列不含bin的行