正则表达式 用来匹配复合条件的字符串,是包含匹配。grep/awk/sed
. | 单个任意字符,除换行符 |
# egrep "^.oo" /etc/passwd root:x:0:0:root:/root:/bin/bash |
|
^ | 匹配行首 |
^abc 以abc开头 ^# 以#开头 # egrep "^root" /etc/passwd |
|
$ | 匹配行尾 |
abc$ 以abc结尾 ^$ 匹配空白行 # grep "shutdown$" /etc/passwd |
|
+ | 最少匹配1次 |
a+ 一个或多个连续的a (abc)+ 一个或多个连续的abc |
|
? | 最多匹配1次,包括0次 |
a? 0个或1个a (abc)? 0个或1个abc |
|
* | 匹配任意次数 |
a* 0个或多个连续的a,grep "a*" 即整篇文档,无意 (abc)* 0个或多个连续的abc |
|
.* | 任意长度的任意字符串 |
元字符{} 限定表达式的匹配次数
\{n\} | 匹配n次 |
(ab){3} 匹配ababab | |
\{n,m\} | 匹配n-m次 |
(ab){1,3} 匹配ab/abab/ababab | |
\{n,\} | 匹配至少n次 |
(ab){2,} 匹配2个及以上连续的ab |
如下,使用扩展正则可省略斜杠
# egrep "^ro{2}t" /etc/passwd
root:x:0:0:root:/root:/bin/bash
# grep "^ro\{2,\}t" /etc/passwd
root:x:0:0:root:/root:/bin/bash
#grep -E "^ro{2}t" /etc/passwd
root:x:0:0:root:/root:/bin/bash
元字符[]
匹配范围内的单个字符,[]内加^可取反
[alc_?] 匹配其中任意一个 |
[a-z] 匹配任意一个小写字母 |
[A-Z] 匹配任意一个大写字母 |
[0-9] 匹配任意一个数字 |
[a-Z0-9] 匹配任意字母或数字 |
[^A-Z] 匹配没有大写字母的行 |
^[^a-z] 匹配不以小写字母开头的行 |
其他元字符
() | 组合为整体(也用在后向引用) ab{1,3} 匹配ab/abb/abbb (ab){1,3} 匹配ab/abab/ababab |
| | 或者 root|bin 匹配root或bin |
\b | 单词边界 \broot\b 匹配单词root, 不匹配keroot/rooty/brooty等字符串 |
\< | 单词的开头 \<th 匹配以th开头的单词 |
\> | 单词的结束 \<root\> 作用与\broot\b相同 |
\ | 转义符号,可以为一些普通字符赋予特殊含义,或者将一些特殊字符变为普通字符 |
字符集合
[[:blank:]] 空格(space)与定位(tab)字符
[[:cntrl:]] 控制字符
[[:graph:]] 非空格(nonspace)字符
[[:space:]] 所有空白字符
[[:print:]] 可显示的字符
[[:xdigit:]] 十六进制数字
[[:punct:]] 所有标点符号
[[:lower:]] 小写字母
[[:upper:]] 大写字母
[[:alpha:]] 大小写字母
[[:digit:]] 数字
[[:alnum:]] 数字和大小写字母
通配符及元字符 用来匹配复合条件的文件名,是完全匹配
* 代表任意(0到多个)字符
? 代表任意1个字符
; 连续不同命令的分隔符
# 配置文件注释
| 管道
~ 用户家目录
- 上一次的目录
$ 变量前需要加的符号
/ 路径分隔符
\ 转义
>或1> 重定向
>> 追加重定向
< 输入重定向
<< 追加输入重定向
‘’ 单引号,不具有变量置换功能,输出即所得
"" 双引号,具有变量置换功能,解析变量后输出
`` tab上面的键中间为命令,会先执行,等价$()
{} 中间为命令区块组合或内容序列 {4,5,6} {1..4}
! 非
&& 当前一个指令执行成功后,执行后一个指令
|| 当前一个指令执行失败时,执行后一个指令
.. 上一级目录
. 当前目录
^ 反向选择符,例:grep -n '^[^a-zA-Z]' file []内的叫反向选择符,[]外的则表示定位在行首。查找行首不是英文字母的行