Sheel 脚本编程之正则表达式
正则表达式
1、什么是正则表达式
Regular Exoress —使用“”一串符号”来描述有共同属性的数据
2、egrep过滤工具(等同于grep -e 用于正则表达式)
-
文本处理顺序:以行为单位,逐行进行处理。默认只输出与表达式相匹配的文本行。
-
基本用法:格式1:( egrep [选项]‘正则表达式’ 文件…) 。
格式2:(前置命令 | egrep [选项] ‘正则表达式’ ) -
常用参数
i:忽略字母大小写
v:条件取反
c:统计匹配的行数
q:静默、无任何输出,一般用于检测
n:显示出匹配结果所在的行号
color:标出显示匹配字串
3、基本元字符
类型 | 含义 | 示例 | 说明 |
---|---|---|---|
^ | 匹配行首 | ^abc | 以abc开头的行 |
$ | 匹配行尾 | abc$ | 以abc结尾的行 |
. | 单个字符 | . | 除换行符(\n)以外的任意单个字符 |
[root@www sed_test]# egrep '^root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@www sed_test]# egrep -c '/bin/bash$' /etc/passwd
27
类型 | 含义 | 示例 | 说明 |
---|---|---|---|
+ | 最少匹配一次 | (abc)+ | 一个或多个连续的abc |
? | 最多匹配一次 | (abc)? | 0个或一个abc |
* | 匹配任意次数 | .* | 任意长度的任意字符串 |
{n} | 匹配n次 | (ab){3} | 匹配ababab |
{n,m} | 匹配n-m次 | (ab){1,3} | 匹配ab,abab,ababab |
{,m} | 匹配至少n次 | (ab){2,} | 匹配俩个及以上的ab |
示例 | 说明 |
---|---|
[alc45_?] | 匹配a、l、c、4、5、_、? |
[a-z] | 匹配任意小写字母 |
[A-Z] | 匹配任意大写字母 |
[0-9] | 匹配任意数字 |
[a-Z0-9] | 匹配任意字母或数字 |
[^A-Z] | 匹配包括非大写字母的行 |
^ [^a-z] | 匹配不以小写字母开头的行 |
类型 | 含义 | 示例 | 说明 |
---|---|---|---|
( ) | 组合为整体 | (ab){1,3} | 匹配ab、abab、ababab |
丨 | 或者 | root | |
\b | 单词边界 | \broot\b | 匹配单词root,不匹配keroot等 |
\ < | 单词的开头 | <th | 匹配以th开头的单词 |
\ > | 单词的结束 | <root< | 作用与\broot\b相同 |
\w | 字母数字下划线 | \wa | 匹配xa,不匹配#a |
\s | 匹配空白 | \sa | 匹配a,不匹配xa |
\d | 匹配数字 | -P \da | 匹配5a,不匹配xa |
sed基本用法
1、sed命令解析
· Stream Editor,流式编辑器(非交互,逐行处理,可实现输出,删除、替换、复制、剪切、导入、导出等各种操作)。
- 命令格式解析
1、主要用法
(1) 格式1:前置命令 | sed [选项] ‘编辑指令’
(2) 格式2:sed [选项] ‘编辑指令’ 文件… … - 常用命令选项
1、-n :屏蔽默认输出(全部文本)
2、-i :直接修改文件内容
3、-r :启用扩展的正则表达式,若与其它选项一起使用、应作为首选项。
2、常见处理操作示例
- 基本的处理动作
常用的动作指令
操作符 | 用途 | 指令示例 |
---|---|---|
p | 打印行 | 2,4p 2p;4p |
d | 删除行 | 2,4d |
s | 字符串替换 | s/old/new、s/old/new/3、s/old/new/g |
sed '4,7s/^/#/' a.txt #将第4-7行注释掉
sed 's/xml//g' a.txt #将所有的xml都删除掉
3、sed应用案例
- 将/var/htmlhtml 修改为/opt/www/html
sed 's#/var/www/html#/opt/www/html#' /etc/httpd/conf/httpd.conf
sed -i “s#$1#$2#” $3
#将 旧内容进行替换,当$1和$2中包含"/"时,
替换指令中的定界符需要更换为其他符号
4、 sed文本块处理
- sed的文本块处理动作
1、单行文本处理
操作符 | 用途 | 指令示例 |
---|---|---|
i | 行前插入文本 | 2iYY 在第二行之前插入文本“YY" 、4,7iYY在第4~7行插入YY |
a | 行后插入文本 | 2aYY 在第二行之后添加文本、/^XX/aYY 在以XX开头的行之后添加文本 |
c | 替换当前行 | 2cYY 将第二行的内容修改为“YY” |
2、多行文本处理
- 修改后的文本有多行时
(1)以换行符 \n 分隔
(2)或者使用 \ 强制换行
sed -n '2cXX\nYY' m.txt
XX
YY
sed -n '2cXX\
> YY' m.txt