linux之通配符
特殊符号
# 注释或者命令提示符中的 用户提示符 表示管理员
$ 获取变量内容 echo $PATH
! 强制执行 wq! q!
| 命令的拼接,管道符
; 命令的分隔符,不管前面的命令是否执行成功,继续向后执行
&& 前面的命令必须执行成功,才会往后执行
|| 前面的命令执行失败,才会往后执行
> 标准输出正确重定向 1>
2> 标准错误输出重定向
`` 执行命令
$() 执行命令
"" 双引号和不加引号可以解析变量内容
'' 所见即所得 不能解析变量
~ 家目录
. 当前的目录
.. 上一级目录
- 上一次所在的目录 su切换用户 更新环境变量
* 表示所有
{} 生成序列
[] 查找序列
? 表示任意单个字符
2>>&1 无论对错都追加写入目标文件
通配符
作用: 用来过滤文件中的字符串
1.^ 过滤以什么开头的行
grep '^m' file
2.$ 过滤以什么结尾的行
grep 'm$' file
3.过滤空行
grep '^$' file
4. 点. 表示任意单个字符
grep '.' file
5. 星 * 前一个字符出现0次及0次以上
grep '8*' file
6. .* 表示文件中所有内容
grep '.*' file
7.[] 表示任意单个字符串 还原带含义的特殊符号 . ^ $ 支持序列
grep '[abc]' file # 不是过滤abc字符的行 过滤或a 或b 或c的行
grep '[a-z]' file
grep '[0-9]' file
grep '[a-Z0-9.^$-]'
# 还原特殊符号
grep '[\.$-]' file
8.[^a] 表示对a进行取反
9.过滤空行和注释
[root@m01 ~]# grep -Ev '^$|^#' /etc/ssh/sshd_config
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
10.扩展正则
# +表示前面的字符出现1次及1次以上
egrep '8+' file
# {} 出现至少n次最多m次
egrep '[0-9]{18}' file # 连续的18个数字
egrep '8{2,3}'file # 至少2次,最多3次 优先匹配后面的数字
# | 或者
egrep '^$|^#' file # 匹配文件的空行和以井号开头的 经常用来过滤文件生效的行需要-v取反
egrep 'qq|test' file # 查找出包含qq的行或者包含test的行
# (a|b|c) 当做一个整体
grep -E '(a|b|c)' /etc/passwd
笔试题: 统计每个字母出现的次数
[root@m01 ~]# grep '.' /etc/passwd -o |sort |uniq -c |sort -rn -k1 |head
138 :
86 n
86 /
78 o
66 s
58 i
41 b
39 t
38 a
36 l
笔试题: 统计每个单词出现的次数
[root@m01 ~]# grep -E '[a-zA-Z]+' /etc/passwd -o |sort |uniq -c |sort -rn |head -n10
24 sbin
23 x
18 nologin
7 var
6 bin
4 root
3 sync
3 spool
3 shutdown
3 mail
匹配身份证号
[root@m01 ~]# grep -E '[0-9]{17}[0-9xX]' id.txt
孔 150000123874591242
夏 222113859123487192
赵 37142518322922103X
夏 222113859123487192
赵 37142518322922103X
夏 222113859123487192
赵 37142518322922103X
夏 222113859123487192
赵 37142518322922103X
赵 37142518322922103X
夏 222113859123487192
赵 37142518322922103X
正则重点
1.^
2.$
3.^$
4.[] 任意单个字符数字序列 对特殊符号还原本意
5.+ awk中使用比较多
6.| 或者使用比较多
7.{} 使用相对较少
8.()sed后向引用
Never try,never know