正则表达式(拓展)、grep(拓展)和sed

一、正则表达式

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' 文件名

匹配方式

  1. 先开始找b开头一直找到f开头
  2. 然后再重新找b开头,一找到f开头,没有f开头就全显示
  3. 重复循环

奇偶数表示

选项-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 修改网卡名

相关推荐
艾伦~耶格尔2 天前
Java 正则表达式详解
java·开发语言·学习·正则表达式
不会写算法的小王3 天前
正则表达式
正则表达式
kuiini3 天前
python学习-08【正则表达式】
python·学习·正则表达式
敲代码不忘补水3 天前
Python 正则表达式详解:从基础匹配到高级应用
java·python·正则表达式
wclass-zhengge3 天前
MySQL篇(高级字符串函数/正则表达式)(持续更新迭代)
android·mysql·正则表达式
立黄昏粥可温5 天前
Python 从入门到实战17(正则表达式操作)
python·正则表达式
shyuu_7 天前
Linux 三种方式查看和设置主机名
linux·运维·服务器·正则表达式·云计算·运维开发
一只会敲代码的小灰灰8 天前
python学习第七节:正则表达式
python·学习·正则表达式
风雨后灬见彩虹8 天前
正则表达式
正则表达式
鸽芷咕8 天前
【Python知识宝库】正则表达式在Python中的应用:字符串模式匹配利器
开发语言·python·正则表达式