# shell--grep和管道符
# grep命令
grep的作用是在文件中提取和匹配符合条件的字符串行。命令格式如下:
[root@localhost ~]# grep [选项] "搜索内容" 文件名
选项:
-i: 忽略大小写
-n: 输出行号
-v: 反向查找
--color=auto: 搜索出的关键字用颜色显示
find也是搜索命令,那么find命令和grep命令有什么区别呢?
1)find命令
find命令用于在系统中搜索符合条件的文件名, 如果需要模糊查询,则使用通配符进行匹配,通配符是完全匹配 (find命令可以通过-regex选项,把匹配规则转为正则表达式规则,但是不建议如此)。
2)grep命令
grep命令用于在文件中搜索符合条件的字符串,如果需要模糊查询,则使用正则表达式进行匹配,正则表达式是包含匹配。
3)通配符与正则表达式的区别
通配符:用于匹配文件名,完全匹配
通配符 | 作用 |
---|---|
? | 匹配一个任意字符 |
* | 匹配0个或任意多个任意字符, 也就是可以匹配任何内容 |
[] | 匹配中括号中任意一个字符。 例如: [abc] 代表一定匹配一个字符,或者是a,或者是b,或者是c。 |
[-] | 匹配中括号中任意一个字符,代表一个范围。 例如: [a-z] 代表匹配一个小写字母。 |
[^] | 逻辑非,表示匹配不是中括号内的一个字符。 例如: [^0-9] 代表匹配一个不是数字的字符。 |
正则表达式:用于匹配字符串,包含匹配
正则符 | 作用 |
---|---|
? | 匹配前一个字符重复0次,或1次(? 是扩展正则,需要使用egrep 命令) |
* | 匹配前一个字符重复0次,或任意多次 |
[] | 匹配中括号中任意一个字符。例如,[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c |
[-] | 匹配中括号中任意一个字符,-代表一个范围。例如,[a-z]代表匹配一个小写字母 |
[^] | 逻辑非,表示匹配不是中括号内的一个字符。例如,[^0-9]代表匹配一个不是数字的字符 |
^ | 匹配行首 |
$ | 匹配行尾 |
# 管道符
命令1的正确输出作为命令2的操作对象
1)例子1:
举个例子,我们经常需要使用“ll”命令查看文件的长格式,不过在有些目录中文件众多,
比如/etc/目录,使用“ll”命令显示的内容就会非常多,只能看到最后的内容,而不能看到前面输出的内容。
这时就可以利用管道符了。命令如下:
[root@localhost ~]# ll -a /etc/ > /root/testfile
[root@localhost ~]# more /root/testfile
使用管道:可以理解为在读取临时文件
[root@localhost ~]# ll -a /etc/|more
2)例子2:
我想在命令ll/etc/的结果中搜索yum的文件名,应该使用find命令?还是grep命令?
find命令不支持管道操作
[root@localhost ~]# ll -a /etc/|grep yum
3)例子3:
netstat命令(CentOS 7中,需要安装net-snmp.x86_64,net-tools.x86_64两个包才有此命令。7.5系统中已经自动安装)格式如下:
[root@localhost ~]# netstat [选项]
选项:
-a: 列出所有网络状态,包括Socket程序
-c: 秒数:指定每隔几秒刷新一次网络状态
-n: 使用IP地址和端口号显示,不使用域名与服务名
-p: 显示PID和程序名
-t: 显示使用TCP协议端口的连接状况
-u: 显示使用UDP协议端口的连接状况
-l: 仅显示监听状态的连接
-r: 显示路由表
# 查询系统中所有开启的端口
netstat -tuln