linux正则表达式
1、正则表达式是什么?
(1)正则表达式就是为了处理大量的文本或字符串而定义的一套规则和方法。
(2)通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串。Linux正则表达式一般以行为单位处理。
2、为何用正则表达式?
- linux运维工作,大量过滤日志工作,化繁为简。
- 简单,高效。
- 正则表达式高级工具;三剑客都支持。
3、基本正则表达式:
^word | 搜索以word开头的内容 |
---|---|
word$ | 搜索以word结尾的内容 |
^$ | 表示空行,不是空格 |
. | 代表且只能代表任意一个字符(不匹配空行) |
\ | 转义字符,让有特殊含义的字符脱掉马甲,现出原形,如.只表示小数点 |
* | 重复之前的字符或文本0个或多个,之前的文本或字符连续0次或多次 |
.* | 任意多个字符 |
^.* | 以任意多个字符串开头,.*尽可能多,有多少算多少,贪婪性 |
[abc] | 匹配字符集合内的任意一个字符a或b或c |
[a-z] | 匹配所有小写字母,小写字母a-z |
[0-9] | 匹配数字0-9 |
[^abc] | 匹配除abc外的字符 |
a\{n,m\} | 重复前面a字符n到m次 |
a\{n,\} | 重复前面a字符至少n次 |
a\{n\} | 重复前面a字符n次 |
4、扩展正则表达式:
+ | 重复前一个字符一次或一次以上,前一个字符连续一个或多个,把连续的文本/字符取出 |
---|---|
? | 重复前面一个字符0次或1次 |
| | 表示或者同时过滤多个字符 |
() | 分组过滤被括起来的东西表示一个整体(一个字符),后向引用 |
[:alnum:] | [a-zA-Z0-9]匹配任意一个字母或数字字符 |
[:alpha:] | 匹配任意一个字母字符(包括大小写字母) |
[:digit:] | 匹配任意一个数字字符 |
[:punct:] | 匹配标点符号 |
示例:显示 /etc/fstab 文件下有多少个不重复的单词;
[root@localhost ~]#cat /etc/fstab | egrep -o "\<[[:alpha:]]+\>" | sort | uniq -c | sort -nr|wc -l
36
5、shell中的特殊符号:
#号:表示符后面的是注释文字。
;号:在 shell 中,担任"连续指令"功能的符号。
单引号(’ '):被单引号用括住的内容,将被视为单一字串。
双引号(" "):引用变量,被双引号用括住的内容,将被视为单一字串。它防止通配符扩展,但允许变量扩展。
反引号(``):返回命令执行结果。
逗号(,):在运算当中当做"区隔"用途。
斜线(/):在路径表示时,代表目录。在四则运算中,代表除法的符号。
管道符(|):连结上个指令的标准输出,做为下个指令的标准输入。
感叹号(!):代表反逻辑的作用,譬如条件侦测中,用 != 来代表"不等于" 。
** 符号:在运算时代表次方。
$ 符号:引用变量。
${}:变量的正规表达式 。
$*:代表所有引用变量的符号。
@ : @: @:@ 与 $* 具有相同作用的符号,不过她们两者有一个不同点。
符号 $* 将所有的引用变量视为一个整体。但符号 $@ 则仍旧保留每个引用变量的区段观念。
$?:状态值,检查命令的执行状态。
{ }:大括号中会夹着一段或几段以"分号"做结尾的指令或变数设定。
[ ]:常出现在流程控制中,扮演括住判断式的作用。
[[ ]]:允许在其中直接使用 || 与&& 逻辑等符号。
|| :逻辑符号 ,代表 or 逻辑的符号。
&& :逻辑符号 ,代表 and 逻辑的符号。
&: 后台工作 ,单一个& 符号,且放在完整指令列的最后端,即表示将该指令列放入后台中工作。