马哥博客作业第三周
正则表达式
Regular Expressions:
基本正则表达式:BRE
扩展正则表达式:ERE
正则表达式的元字符分类:字符匹配、匹配次数、位置锚定、分组
1.字符匹配
| 字符 | 用途 |
| . | 匹配单个字符 |
| [] | 中括号里任意字符 |
| [^] | 排去中括号里任意字符 |
| [:alnum:] | 字母和数字 |
|
[:alpha:]
|
任何英文大小写字符
|
|
[:lower:]
|
小写字母 |
|
[:upper:]
|
大写字母 |
|
[:blank:]
|
空白字符(空格和TAB) |
|
[:space:]
|
水平和垂直空白字符
|
|
[:cntrl:]
|
不可打印控制字符 |
|
[:digit:]
|
十进制数字 |
|
[:xdigit:]
|
十六进制数字 |
|
[:graph:]
|
可打印的非空白字符 |
|
[:print:]
|
可打印字符 |
|
[:punct:]
|
标点符号 |
2.匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
| 字符 | 用途 |
| * |
匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
|
| .* |
任意长度的任意字符
|
| \? |
匹配其前面的字符0或1次,即:可有可无
|
| \+ |
匹配其前面的字符至少1次,即:肯定有,>=1
|
|
\{n\}
|
匹配前面的字符n次
|
|
\{m,n\}
|
匹配前面的字符至少m次,至多n次
|
|
\{,n\}
|
匹配前面的字符至多n次,<=n
|
|
\{n,\}
|
匹配前面的字符至少n次
|
3.位置锚定: 用于定位出现的位置
| 字符 | 用途 |
| ^ | 行首 |
| $ | 行未 |
|
^PATTERN$
|
整行 |
|
^$
|
空行 |
|
^[[:space:]]*$
|
空白行 |
|
\< 或 \b
|
词首 |
|
\> 或 \b
|
词尾 |
|
\<PATTERN\>
|
整个单词 |
4.分组
| 字符 | 用途 |
|
a\|b
|
或者 |
|
C\|cat
|
或者 |
|
\(C\|c\)at
|
字符串作为整体 |
文本三剑客
grep
| 字符 | 用途 |
|
--color=auto
|
对匹配到的文本着色显示
|
|
-m #
|
匹配#次后停止
|
| -v |
显示不被pattern匹配到的行
|
| -i |
忽略字符大小写
|
| -n |
显示匹配的行号
|
| -c |
统计匹配的行数
|
| -o |
仅显示匹配到的字符串
|
| -q |
静默模式,不输出任何信息
|
| -A # |
后#行
|
| -B # |
前#行
|
| -C # |
前后各#行
|
| -e |
实现多个选项间的逻辑or关系
|
| -w |
匹配整个单词
|
| -E |
使用ERE,相当于egrep
|
| -F |
不支持正则表达式,相当于fgrep
|
| -f |
根据模式文件处理
|
| -r |
递归目录,但不处理软链接
|
| -R |
递归目录,但处理软链接
|
sed
和次不同,sed是行编辑器
格式: sed [option]... 'script;script;...' inputfile...
常见选型:
-
-
- -n 不输出模式空间内容到屏幕,即不自动打印
- -e 多点编辑
- -f /PATH/SCRIPT_FILE 从指定文件中读取编辑脚本
- -r, -E 使用扩展正则表达式
- -i.bak 备份文件并原处编辑
-
script格式 : ‘地址命令’
地址格式 :
命令:
| 字符 | 用途 |
| p |
打印当前模式空间内容,追加到默认输出之后
|
| ip |
忽略大小写输出
|
| d |
删除模式空间匹配的行,并立即启用下一轮循环
|
|
a [\\]text
|
在指定行后面追加文本,支持使用\n实现多行追加
|
|
i [\\]text
|
在行前面插入文本
|
|
c [\\]text
|
替换行为单行或多行文本
|
|
w /path/file
|
保存模式匹配的行至指定文件
|
|
r /path/file
|
读取指定文件的文本至模式空间中匹配到的行后
|
| = |
为模式空间中的行打印行号
|
| ! |
模式空间中匹配行取反处理
|
|
s/pattern/string/
|
修饰符 查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s###替换修饰符:
|
| g |
行内全局替换
|
| p |
显示替换成功的行
|
| w /PATH/FILE |
将替换成功的行保存至文件中
|
| i , I |
忽略大小写
|
sed的高级用法
sed 中除了模式空间,还另外还支持保持空间(Hold Space),利用此空间,可以将模式空间中的数据,临时保存至保持空间,从而后续接着处理,实现更为强大的功能。
常见的高级命令
- P 打印模式空间开端至\n内容,并追加到默认输出之前
- h 把模式空间中的内容覆盖至保持空间中
- H 把模式空间中的内容追加至保持空间中
- g 从保持空间取出数据覆盖至模式空间
- G 从保持空间取出内容追加至模式空间
- x 把模式空间中的内容与保持空间中的内容进行互换
- n 读取匹配到的行的下一行覆盖至模式空间
- N 读取匹配到的行的下一行追加至模式空间
- d 删除模式空间中的行
- D 如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间不包含换行符,则会像发出d命令那样启动正常的新循环
shell脚本编程基础
1. shell脚本的用途
自动化常用命令
执行系统管理和故障排除
各种系统命令的组合
数据存储:变量、数组
表达式:a + b
控制语句:if
格式要求: 首行shebang机制1.使用文本编辑器来创建文本文件 必须包括shell声明序列:#!
2.加执行权限, 在命令行指定脚本的绝对或相对路径
3.运行脚本
脚本注释规范- 变量数据的类型: 字符
- 变量引用
$name $(name)
弱引用:"$name"其中的变量引用会被替换为变量值
强引用:'$name'其中的变量引用不会被替换成变量值,而保持原字符串
set 显示所有的变量
unset <name>删除变量
- 可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量
- 一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程
- 一般只在系统配置文件中使用,在脚本中较少使用
变量声明和赋值:
只读变量 : 只能声明定义,但后续不能修改和删除,即常量
声明只读变量: readonly name daclare -r name
查看只读变量: readonly [-p] daclare -r
位置变量: 在bash shell中内置的变量,在脚本代码中调用通过命令行传递给脚本参数
退出状态码变量
$?为0 表示成功 $?为1-255 表示失败
- test EXPRESSION
- [ EXPRESSION ] #和test 等价,建议使用 [ ]
- [[ EXPRESSION ]]
expression注意前后必须有空白字符
变量测试:
文件测试
- -a FILE:同 -e
- -e FILE: 文件存在性测试,存在为真,否则为假
- -b FILE:是否存在且为块设备文件
- -c FILE:是否存在且为字符设备文件
- -d FILE:是否存在且为目录文件
- -f FILE:是否存在且为普通文件
- -h FILE 或 -L FILE:存在且为符号链接文件
- -p FILE:是否存在且为命名管道文件
- -S FILE:是否存在且为套接字文件.
{ }和( )都可以将多个命令组合在一起,批量执行
使用read命令来接受输入
格式:read [options] [name ...]

浙公网安备 33010602011771号