一、正则表达式
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脚本语法格式
语法:地址+命令
- 不给地址:给全文进行处理
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