阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

快速掌握grep命令及正则表达式

274次阅读
没有评论

共计 3628 个字符,预计需要花费 10 分钟才能阅读完成。

本文由 LinuxProbe.Com 团队成员 魏丽猿 整理发布,点此查看 最新 Linux 资讯

Linux 系统自带了支持拓展正则表达式的 GNU 版本 grep 工具,所有的 Linux 发行版中均默认安装 grep,grep 命令被用来检索一台服务器或工作站上任何位置的文本信息,如何在 Linux 系统和类 Unix 的操作系统中使用带正则表达式的 grep 命令呢?

快速了解正则表达式

1、如何匹配你要查找的内容?

正则表达式只不过是每个输入行匹配的模式。

在‘/etc/passswd’中检索‘vivek’。

grep vivek /etc/passwd

输出结果案例:

vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash
vivekgite:x:1001:1001::/home/vivekgite:/bin/sh
gitevivek:x:1002:1002::/home/gitevivek:/bin/sh

在任何情况下都搜索‘vivek’(即不区分大小):

grep -i -w vivek /etc/passwd

不区分大小写地检索‘vivek’和‘raj’:

grep -E -i -w 'vivek|raj' /etc/passwd

在最后一个例子中,使用了扩展正则表达式的模式。

固定检索内容的位置:
你可以使用 ^ 和 $ 符号强制一个正则表达式分别匹配一行的开始或结束的位置。下面的示例显示以‘vivek’开头的文本。

grep ^vivek /etc/passwd

输出结果示例:

vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash
vivekgite:x:1001:1001::/home/vivekgite:/bin/sh

你可以只显示以 vivek 开头的文本行。举例说就是不显示 vivekgite , vivekg 这样单词开头的。

grep -w ^vivek /etc/passwd

检索以‘foo’结尾的文本格式:

grep 'foo$' FILENAME

你还可以用下面这样的方式搜索空白行:

grep '^$' FILENAME

2、如何匹配具体字符?

匹配‘Vivek’或‘vivek’:

grep '[vV]ivek' FILENAME

或者可以这样:

grep '[vV][iI][Vv][Ee][kK]' FILENAME

你可以匹配数字(例如匹配 vivek1 或 Vivek2):

grep -w '[vV]ivek[0-9]' FILENAME

你可以匹配两位数(例如匹配 foo11,foo12):

grep 'foo[0-9][0-9]' FILENAME

不仅仅是数字,你可以匹配字母:

grep '[A-Za-z]' FILENAME

显示所有包含“w”或“n”字母的文本行:

grep [wn] FILENAME

在括号内的表达式中,在“[:”和“:]”中所附的字符类的名称:代表属于该类的所有字符的列表。标准字符类名称:

[:alnum:] – 字母数字字符。[:alpha:] – 字母顺序
[:blank:] – 空格和制表符。[:digit:] – 数字:‘0 1 2 3 4 5 6 7 8 9’。[:lower:] – 小写字母:‘a b c d e f‘。[:space:] – 特殊字符:制表符,换行符,垂直制表符、换页,回车,和空间。[:upper:] – 大写字母:‘A B C D E F G H I J K L M N O P Q R S T U V W X Y Z’。

在下面这个例子中,匹配所有大写字母:

grep '[:upper:]' FILENAME

3、如何使用通配符?

你可以用“.”来代替单个字符。在下面的例子中,查询了所有以字母“b”开头、字母“t”结尾的三个字符的单词。

grep '\<b.t\>' FILENAME

在上面的例子中:

\< 在单词的开始位置匹配空格字符串
\> 在单词的结尾匹配空格字符串

检索并输出所有两个字母的结果:

grep '^..$' FILENAME

检索并显示所有以‘.’和数字开头的结果:

grep '^\.[0-9]' FILENAME
转义字符’.’

下面的正则表达式查找 IP 地址 192.168.1.254 将不能获得预期的结果:

grep '192.168.1.254' /etc/hosts

其中三个点都需要被转义:

grep '192\.168\.1\.254' /etc/hosts

以下示例将只匹配一个地址:

egrep '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}' FILENAME

以下将不分大小写地匹配单词 Linux 或 Unix:

egrep -i '^(linux|unix)' FILENAME
深入探索 grep 高级查找模式

1、如何检索一个具有以‘-‘开头的的模式?

使用 -e 选项搜索所有匹配‘–test–‘的结果。grep 会尝试把‘–test–‘作为一个选项解析:

grep -e '--test--' FILENAME

2、如何在 grep 中使用 OR 的逻辑运算?

grep -E 'word1|word2' FILENAME### OR ###egrep 'word1|word2' FILENAME

或者可以这样做

grep 'word1\|word2' FILENAME

3、如何在 grep 中使用 AND 的逻辑运算?

按照下面的语法显示所有包含了单词‘word1′ 和‘word2′ 的结果:

grep 'word1' FILENAME | grep 'word2'

或者可以这样:

grep 'foo.*bar\|word3.*word4' FILENAME

4、如何测试序列?

你可以使用下面的语法测试一个字符在序列中的重复的次数:

{N}
{N,}
{min,max}

匹配包含两个字母 v 的字符串结果:

egrep "v{2}" FILENAME

下面的例子中将检索文件内包含“col”和“cool”的字符串结果:

egrep 'co{1,2}l' FILENAME

下面的例子中将匹配至少含有 3 个字母 c 的结果:

egrep 'c{3,}' FILENAME

下面的示例将匹配“91-1234567890″ 格式的手机号码(即“两位数字 - 十位数字”)

grep "[[:digit:]]\{2\}[-]\?[[:digit:]]\{10\}" FILENAME

5、如何使 grep 的输出结果高亮标注?

使用下面例子的语法:

grep --color regex FILENAME

6、如何使 grep 的输出只显示匹配的部分而不是整行?

使用下面例子的语法:

grep -o regex FILENAME
正则表达式操作符总结

正则表达式: 操作符 含义

. 匹配任何单个字符。? 匹配前一个字符 0 次或 1 次。* 匹配前一个字符≥0 次。+ 匹配前一个字符≥1 次。{N} 匹配前一个字符 N 次。{N,} 匹配前一个字符≥m 次。{N,M} 匹配前一个字符 N 到 M 次。– 如果在列表中的某个列表或某个范围内的结束点,表示该范围。^ 开始标记,表示在开始位置匹配一个空字符串。也表示不在列表的范围内的字符。$ 结束标记。匹配一个空的字符串。\b 单词锁定符。在一个单词的边缘位置匹配空字符串。\B 在一个单词的非边缘位置匹配空字符串。\< 匹配单词开始的空字符串。\> 匹配单词结尾的空字符串。
关于 grep 和 egrep

egrep 即 grep -E,它把模式作为一个扩展的正则表达式解释。grep 帮助文档中这样定义:

In basic regular expressions the meta-characters ?, +, {, |, (, and) lose their special meaning; instead use the backslashed versions \?, \+, \{,\|, \(, and \).
       Traditional egrep did not support the { meta-character, and some egrep implementations support \{ instead, so portable scripts should avoid  {  in
       grep -E patterns and should use [{] to match a literal {.
       GNU grep -E attempts to support traditional usage by assuming that { is not special if it would be the start of an invalid interval specification.
       For example, the command grep -E '{1' searches for the two-character string {1 instead of reporting a syntax  error  in  the  regular  expression.
       POSIX.2 allows this behavior as an extension, but portable scripts should avoid it.

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计3628字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7806474
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的 Nano Banana Pro?附赠邪修的用法 前言 大家好,我是星哥,今天来介绍谷歌的 ...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024 程序员】我劝你赶紧去免费领一个 AWS、华为云等的主机 每年 10 月 24 日,程序员们都会迎来...
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...