您的位置:首页 > 运维架构 > Shell

1.shell工具sed中的正则表达式

2016-08-10 13:17 155 查看


1.

sed简介:

sed是一种流编辑器,一次处理一行内容。经过sed编辑后的文件内容并没有改变,除非进行存储输出。

基本正则

--------------------------------------------------

sed中的替换命令格式: sed 's/正则表达式/替换内容/' 文本文件

举例:  sed 's/.oot/ROOT/' /etc/passwd  .表示匹配除换行符以外的任意字符

. 表示任意单个字符

* 表示他的前置字符有0个或多个。

.* 表示任意字符

[] 表示匹配括号中的任意一个字符(只能是一个字符)。

[^abc] ^ 表示取反  除了abc之外的字符 

- 在[]中如果不是在第一个或这最后一个 那么表示范围符

^ 每行的开头 s/^bin/root/  开头是bin  把bin改成root

$ 每行的结尾 s/bin$/root/  结尾是bin  把bin改成root

\ 转义符

{} 前面需要加转义字符。 \{\}

's/abc\{2,\}/A/'  匹配ab后面至少两个c的替换成A。,表示至少

's/abc\{2,3\}/A/' 匹配2到3个c
\< 表示开头 与 ^ 相同, \> 表示结尾  与 $ 相同

扩展正则
--------------------------------------------------

扩展正则 在 sed 后面要加 -r

?  前置字符出现0次或1次

+  前置字符有一个或多个

|   或

()  用来表示分组  's/(a|b)b/root' :  把ab 或 bb 替换成root

{} 与基本正则中相同 但是不需要加转义字符 \ 。 

编写正则表达式的3个步骤:

1.知道要匹配的内容以及它如何出现在文本中

2.编写一个模式来描述要匹配的内容

3.测试模式来查看它匹配的内容

模式匹配产生的结果:

hits(命中):这是我想匹配的行

misses(未命中):这是我不想匹配的行

omissions(遗漏):这是我不能匹配但是想要匹配的行

false alarms(假警报):这是我不想匹配但是却匹配了的行

----------------------------------------------
正则表达式的分类应用:

字符类

[Ww]hat

字符的范围

[0-9] [a-z]

排除字符类

[^0-9]

重复出现的字符

[15]0*

字符的跨度

* 与 \{n,m\}

电话号码的匹配

[0-9]\{3\}-[0-9]\{7,8\}

分组操作

compan(y|ies)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: