标签搜索

grep命令详解

mrui
2024-09-26 / 0 评论 / 56 阅读 / 正在检测是否收录...


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
0

评论

博主关闭了当前页面的评论