grep的第一个参数(待搜索的内容)可以是一个简单的字符串,也可以是更复杂的正则表达式。
命令行选项
[root@web1]# grep panel *
1panel.service:Description=1Panel, a modern open source linux panel
1panel.service:ExecStart=/usr/bin/1panel
1pctl: systemctl status 1panel.service
1pctl: systemctl start 1panel.service
1pctl: systemctl stop 1panel.service
-h:不显示特定文件名
[root@web1]# grep -h panel *
Description=1Panel, a modern open source linux panel
ExecStart=/usr/bin/1panel
systemctl status 1panel.service
systemctl start 1panel.service
systemctl stop 1panel.service
-c:只显示匹配到了几次,不显示文件中包含指定字符串的行
[root@web1]# grep -c panel *
1panel:526
1panel.service:2
1pctl:23
install.log:3
install.sh:11
LICENSE:0
README.md:6
-l:只显示包含搜索结果的文件名
如果在一个文件中找到了多次匹配,grep仍然只输出该文件名一次。如果没有找到匹配,则什么都不输出。
[root@web1]# grep -l panel *
1panel
1panel.service
1pctl
install.log
install.sh
README.md
-q:只显示搜索是否成功
-q选项没有任何输出,需要使用$?来查看该命令是否成功。如果搜索成功,返回0;如果搜索不到结果,返回1。根据-q选项的该特点,该选项参数更长用于if、while等条件判断中。
[root@web1]# grep -q panel *
[root@web1]# echo $?
0
[root@web1]# if grep -q panel 1panel ;then echo yes;else echo no;fi
yes
#另一种写法
[root@web1 1panel-v1.10.1-lts-linux-amd64]# if grep panel 1panel > /dev/null ;then echo yes;else echo no;fi
yes
#如果不重定向到/dev/null,会输出grep的执行结果,界面显得凌乱。
[root@web1 1panel-v1.10.1-lts-linux-amd64]# if grep panel * ;then echo yes;else echo no;fi
README.md:- 环境地址:<https://demo.1panel.cn/>
README.md:- 密码:1panel
README.md:curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh
README.md:- [在线文档](https://1panel.cn/docs/)
yes
-i:不区分大小写
[root@web1]# grep -i Panel *
1panel.service:Description=1Panel, a modern open source linux panel
1panel.service:ExecStart=/usr/bin/1panel
1pctl: echo "1Panel 控制脚本"
1pctl: echo " status 查看 1Panel 服务运行状态"
1pctl: echo " start 启动 1Panel 服务"
1pctl: echo " stop 停止 1Panel 服务"
-v:对搜索结果取反
搜索更复杂的模式
grep中的正则表达式提供了更为强大的模式匹配功能,能够满足大部分需求。正则表达式描述了待匹配字符串的模式。
字母字符(或者对于shell没有特殊含义的其他字符),只匹配自身。如“A”匹配A,“B”匹配B,“ab”匹配ab。
特殊字符:既可以单独使用,也可以与其他字符结合。
. 点号,匹配任意单个字符。
- 星号,匹配上一个字符0次或多次。
^ 尖角号,匹配文本行的行首位置。
$ 美元符号,匹配文本行的行尾位置。
[] 匹配其中任意一个字符。
[^] 方括号中以尖角号开头,则匹配的是不在该字符组中的任意字符。
{n,m} 区间表达式,一种重复机制。匹配前面的内容n到m次。
{n} 只重复n次。
{n,} 至少重复n次。
📜 举例:
.... 可以匹配任意4个字符
.A 匹配第二个字母是A的任意字符
.A. 匹配任意单个字符,然后是A,然后是任意单个字符
A* 匹配A出现了0次或多次
.* 匹配任意单个或多个字符(不包含空行)
^$ 匹配空行
A{5} 匹配连续的5个A字母
A{5,} 至少匹配连续的5个A
评论