什么是正则表达式
正则表达式是一种文本模式,或者说是一种特殊的字符串模式,它的作用是处理字符串。
字符
学习正则表达式的前提是需要了解正则表达式中需要用到的一些字符及其含义:
- \ 转意符,将特殊字符或符号的意义去除。
- . 代表任意一个字符。
- * 重复0次或多次*前的一个字符。
- [] 字符的集合。
- .* 匹配所有字符。
- ^ 匹配某字符的开头。
- $ 匹配某字符的结尾。
- ^$ 匹配空行。
- [^] 取反。
- ^.* 匹配多个任意字符开头。
- | 或。
- [A-Z] 26个大写字母。
- [a-z] 26个小写字母。
- [0-9] 0~9的数字。
- \d 匹配一个数字字符。
- \w 匹配包括下划线的任意单词字符。
- \b 匹配单词的开始或结束。
- + 重复一次或多次。
- ? 重复零次或一次。
- {n} 重复n次。
- {n,m} 重复n到m次。
文本处理命令
正则表达式经常会与这些命令配合一起使用。
grep命令
grep 命令是一个强大的文本搜索工具,它与正则表达式配合,将匹配到的行输出到屏幕上。
语法格式:
grep [选项] 条件表达式 文件名
常用选项:
- -c 只输出匹配的列数。
- -I 不区分大小写,只适用于单字符。
- -l 查询多文件时只输出包含匹配字符的文件名。
- -n 显示匹配行及行号。
- -s 不显示不存在或无匹配文本的错误信息。
- -v 显示不包含匹配文本的所有行。
sed 命令
sed 命令是一种流编辑器,用于过滤或转换文本。
语法格式:
sed [选项] 'command' 文件名
常用选项:
- -n 取消默认输出。
- -i 修改文件内容。
常用command:
- d 删除。
- p 打印。
- s 替换指定字符。
- g 全局替换。
awk 命令
awk 是一个强大的编程工具,用于Linux和UNIX下对文本和数据进行处理。
语法格式:
awk [选项] '条件{动作}' 文件名
常用选项:
- -F fs 指定分隔符,fs可以是字符串或正则表达式。
- -f scripfile 从脚本文件种读取awk命令。
正则表达式使用示例
将系统种的IP地址去除并输出到屏幕上
- 打印IP地址信息,然后截取第二行内容输出。
[root@test ~]# ifconfig eth0|sed -n '2g'
- 将第一步结果中的"addr:"及其前所有字符全局替换成空。
[root@test ~]# ifconfig eth0|sed -n '2g'|sed -r 's# Bcast.*$##g'
- 将第二步的结果种的"Bcast"开头且任意字符结尾的部分全局替换成空。
[root@test ~]# ifconfig eth0|sed -n '2g'|sed -r 's# Bcast.*$##g'|sed -r 's# Bcast.*$##g'
使用grep命令与awk命令配合正则表达式取出IP地址
- 将带有IP地址的行过滤打印出来,再进行过滤取出IP地址。
[root@test ~]# ifconfig eth0|grep "inet addr"
- 以空格和":"作为分隔符,“+”代表前面多个重复的分隔符视为一个,将第四列打印。
[root@test ~]# ifconfig eth0|grep "inet addr"|awk -F '[ :]+' '{print $4}'
vim 编辑器
vim就是vi编辑器的加强版,比vi更容易使用。
vim的三种模式
- 命令模式
在此模式下,可以通过移动光标,对字符或行进行删除操作。 - 插入模式
在命令模式下,按i
键即可进入插入模式,只有在插入模式才可以进行文字、字符的输入操作。按Esc
键可以退出插入模式。 - 底行模式
在命令行模式下,按:
键进入底行模式,在此模式下,可以保存文件、设置编辑环境,以及退出vim编辑器。按Esc
键可以退出底行模式。
光标的移动方法
vim编辑器在命令行模式下的光标的移动方法。
按键 | 说明 |
---|---|
Crtl + F | 屏幕向下移动一页,相当于按Page Down 键 |
Crtl + B | 屏幕向上移动一页,相当于按Page Up 键 |
0 | 移动到行首位置 |
$ | 移动到行尾位置 |
GG | 移动到第一行 |
G | 移动到最后一行,与Shift + G 功能相同 |
nEnter | 光标向下移动n行(n为数字) |
搜索与查找
vim编辑器在命令模式下搜索与查找的方法
具体命令 | 说明 |
---|---|
/word | 向下查找匹配名为word 的字符串 |
?word | 向上查找匹配名为word 的字符串 |
:n1,n2s/word1/word2/g | n1和n2为数字,在第n1行与第n2行之间查找匹配word1 的字符串,并将word1 的字符串转换成word2 |
:1,$S/word1/word2/g | 在第一行与最后一行之间查找匹配word1 的字符串,并将word1 的字符串转换成word2 |
:1,$S/word1/word2/gc | 在第一行与最后一行之间查找匹配word1 的字符串,并将word1 的字符串转换成word2 ,替换前进行提示,确认是否需要替换 |
:%s/word1/word2/g | 将匹配word1 的内容全部替换为word2 |
删除、复制与粘贴
vim编辑器在命令模式下删除、复制与粘贴。
具体命令 | 说明 |
---|---|
yy | 复制光标当前的行 |
nyy | 复制当前光标所在向下的n行 |
dd | 删除光标当前所在的行 |
ndd | 删除当前光标所在向下的n行 |
U | 撤销上一次的操作 |
p | 将复制的内容粘贴在光标所在的下一行 |
P | 将复制的内容粘贴在光标所在的上一行 |
x | 删除光标所在的后一个字符 |
X | 删除光标所在的前一个字符 |
保存与退出
vim编辑器在插入模式下保存与退出的方法。
具体命令 | 说明 |
---|---|
:wq | 保存并退出 |
:wq! | 保存并强制退出 |
:q! | 强制退出不保存 |