一、正则表达式
egrep默认使用的是扩张正则。
表示次数
* | 匹配前面字符任意数 |
---|---|
? | 0次或者1次 |
+ | 1次或者多次 |
{n} | 匹配n次 |
{m,n} | 最少m次,最多n次 |
{,n} | 匹配前面的字符最多n次 |
{n,} | 匹配前面的字符最少n次 |
表示分组
()分组 | 将多个字符捆绑在一起当作一个整体处理 |
---|---|
\1、\2 | 后向引用 |
| | 或者 |
a|b | a或者b |
C|cat | C或cat |
(C|c)at | Cat或cat |
二、grep
格式:grep [选项]… 查找条件 目标文件
选项 | 功能 |
---|---|
-color=auto | 对匹配到的文本着色显示 |
-m | 匹配#次后停止 |
grep -m 1 root /etc/passwd | 多个匹配只取第一个 |
-v | 显示不被pattern匹配到的行,即取反 |
grep -Ev '[[:space:]]*#|^$' | |
-i |
忽略字符大小写 |
-n | 显示匹配的行号 |
-c | 统计匹配的行号 |
grep -c root /etc/passwd | 统计匹配到的行号 |
-o | 仅显示匹配到的字符串 |
-q | 静默模式,不输出任何模式,用途写脚本 |
-A | after,后#行 |
grep -A3 root /etc/passwd | 匹配到行后3行显示出来 |
-B | before,前#行 |
-C | context,前后各#行 |
-e | 实现多个选项间的逻辑or关系 |
grep -e root -e bash /etc/passwd | 包含root或者包含bash的行 |
grep -E root|bash /etc/passwd | |
-w | 匹配整个单词 |
grep -w root /etc/passwd | |
useradd rooter | |
-E | 使用ERE,相当于egrep |
-F | 不支持正则表达式,fgrep |
-f | file根据模式,处理两个文件相同内容 把第一个文件作为匹配条件 |
-r | 递归目录,但不处理软链接 |
-R | 递归目录,但处理软链接 |
统计当前主机的连接状态
统计当前连接主机数
三、sed
sed是行编辑器,和vi不同的是,sed是读取一行,处理一行,输出一行;而vi是将整个文件放到内存里打开。前者基本无视文件内容的大小,后者要注意自身内存是否能够涵盖住文件大小。
格式:sed [选项]... {脚本(如果没有其他脚本)} [输入文件]...
3.1 基本用法
sed [option]... 'script;script;...' [input file...]
选项 自身脚本语法 支持标准输入管道
选项 | 功能 |
---|---|
-n | 不输出模式空间到屏幕,即不自动打印 |
-e | 多点编辑[root@www data]#sed -n -e '/^r/p' /etc/passwd |
-f |
FILE从指定文件中读取编辑脚本 |
-r、-E | 使用扩展正则表达式 |
-i.bak | 备份文件并原处编辑 |
3.2 sed脚本语法格式
语法:地址+命令
1. 不给地址:给全文进行处理
2.单地址:
#:指定的行 $:最后一行
/pattern/:该此处模式所能匹配到的每一个行
3.地址范围
#,#:从#行到第#行。举例:3,6代表从第3行到第6行
#,+#:从#行到第+#行。举例:3,+4代表从第3行到第7行
4.步行:~
1~2 奇数步
2~2 偶数步
命令 | 注释 |
---|---|
p | 打印当前模式空间内容,追加到默认输出之后 |
Ip | 忽略大小写输出 |
d | 删除模式空间匹配的行,并立即启动下一轮循环 |
a | [\text]在指定行后面追加文本,支持使用\n实现多行追加 |
i | [\text]在行前面插入文本 |
c | [\text]替换行为单行文本或多行文本 |
w | file保存模式匹配的行至指定文件 |
r | file读取指定文件的文本至模式空间中匹配到的行号 |
= | 为模式空间的行打印行号 |
! | 模式空间中匹配行取反处理 |
q | 结束或退出sed |
另外它还支持正则表达式
自动打印需要打印否则会全部打印,如图所示
正确结果应该如下图所示
匹配两个正则表达式的行
基本格式: '/表达式1/,/表达式2/p' 文件名
匹配方式
- 先开始找b开头一直找到f开头
- 然后再重新找b开头,一找到f开头,没有f开头就全显示
- 重复循环
奇偶数表示
选项-d:删除
修改文件内容,常常用于修改配置文件
-i和-i.bak的区别
-i:修改文件
-i.bak:修改文件前先备份
选项-a:追加
3.3 搜索替代
s/pattern/string/修饰符 查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s###
替换修饰符:
g 行内全局替换
p 显示替换成功的行
w /PATH/FILE 将替换成功的行保存至文件中
I,i 忽略大小写
内容较长就不展示了
提取版本号
[root@localhost /]#cat 1.txt | grep -e "[0-9]\+\."
ant-1.9.7.jar
ant-launcher-1.9.7.jar
antlr-2.7.7.jar
antlr-runtime-3.4.jar
aopalliance-1.0.jar
archaius-core-0.7.6.jar
asm-5.0.4.jar
aspectjweaver-1.9.5.jar
bcpkix-jdk15on-1.64.jar
bcprov-jdk15-1.46.jar
bcprov-jdk15on-1.64.jar
checker-compat-qual-2.5.5.jar[root@localhost /]#cat 1.txt |sed -r 's/.*-(.*)\.jar/\1/'
1.9.7
1.9.7
2.7.7
3.4
1.0
0.7.6
5.0.4
1.9.5
1.64
1.46
1.64
2.5.5
3.4 变量
3.5 改配置文件
3.6 修改网卡名
文章来源:https://www.toymoban.com/news/detail-827233.html
文章来源地址https://www.toymoban.com/news/detail-827233.html
到了这里,关于正则表达式(拓展)、grep(拓展)和sed的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!