# 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
更新时间: 2024年1月5日星期五上午11点23分