首页 > 编程知识 正文

某同学企图用ping命令(找规律第n个数的公式)

时间:2023-05-06 13:09:28 阅读:83053 作者:2373

引言

grep是Linux上用于文件处理的最有用、最强大的命令之一。

在一个或多个输入文件中查找与正则表达式匹配的行,并将每个匹配的行写入标准输出。

在这篇文章中,您将学习如何在grep的GNU版本中使用大多数Linux操作系统缺省可用的正则表达式的基础。

grep的正则表达式

正则表达式(regex )是与一系列字符串匹配的模式。 模式由操作员、组成字符和元字符组成,具有特殊意义。

GNU grep支持三种正则表达式语法:基本、扩展和Perl。

在其最简单的形式中,没有给出正规表现型时,正规表达式将检索模式解释为基本正规表达式。

要将模式解释为扩展正则表达式,请使用-E (或--tended-regexp )选项。

在GNU的正则表达式安装中,基本正则表达式句法和扩展正则表达式句法之间没有功能上的差异。 唯一的区别是,基本正则表达式中的元字符?{,|,(将解释为文字。

要在使用基本表达式时保留元字符的特殊含义,必须使用反斜杠转义字符。 稍后将介绍这些元字符和其他元字符的含义。

通常,正则表达式必须始终用单引号引起来,以便shell不会解释和扩展元字符。

文本匹配

grep命令的最基本用法是在文件中搜索字符或字符串。

例如,要显示/etc/passwd文件中包含字符串“bash”的所有行,请运行以下命令:

grep bash /etc/passwd的输出内容如下。

root : x :033600336003360 root :/root : /发夹的发箍/底座

coder : x : x : 10003360 10003360 coder :/home/coder : /发箍/bash在本例中,字符串“bash”是一个基本正则表达式,由四个字符组成。 它告诉grep在“b”中搜索“a”、“s”和“h”之后的字符串。

缺省情况下,grep命令区分大小写。 也就是说,大小写被视为不同的字符。 要在搜索时忽略大小写,请使用-i选项- -忽略- case。

需要注意的是,grep将搜索模式作为字符串而不是单词进行搜索。 因此,如果搜索“gnu”,grep也会打印“gnu”嵌入在较大单词中的行,如“cygnus”和“magum”。

如果搜索字符串包含空格,则必须用单引号或双引号引起来。

组用户/以太网/密码

锚点

锚点是元字符,可以指定必须在行中的何处找到匹配项。 ^ (插入记号)与行首的空字符串匹配。

在以下示例中,字符串“linux”仅在行首时匹配。

grep '^linux' file.txt$(dollar )符号与行首的空字符串匹配。 使用以下方法查找以字符串“linux”结尾的行。

grep 'linux#39; file.txt也可以使用这两个锚点来构建正则表达式。 例如,要查找只包含“linux”的行,请执行以下操作:

grep '^linux#39; 如果要通过节拍匹配file.txt空白行,可以使用^$模式。

匹配单个字符

那个.(句点)符号是与任意一个字符相匹配的元字符。

例如,要与以“kan”开头、以字符串“roo”结尾的两个字符匹配,请使用以下模式:

grep 'kan.roo' file.txt现在匹配包含kangaroo的行。

方括号表达式

方括号表达式允许通过将一系列字符放在方括号[]中进行匹配。 例如,要查找包含“接受”或“接受”的行,请使用以下公式:

如果grep 'acce[np]t' file.txt方括号中的第一个字符是插入记号,则它将与不在方括号中的单个字符匹配。

以下模式与任何字符串的组合(以“co”开头,后跟除“l”和“la”以外的字符)匹配,但与包含“cola”的行不匹配。

可以在方括号内指定字符范围,而不是将grep 'co[^l]a' file.txt字符逐个放置。

范围表达式由指定由连字符分隔的范围的开头和结尾字符组成。 例如,“简单的馒头”相当于“阿贝歇”,“1-3”相当于“123”。

以下表达式匹配所有以大写字母开头的行。

格雷普^足球俱乐部

le.txt

grep还支持用括号括起来的预定义字符类。下表显示了一些最常见的字符类:

[:alnum:] 字母数字字符。[:alpha:] 字母字符。[:blank:] 空格和制表符。[:digit:] 数字。[:lower:] 小写字母。[:upper:] 大写字母。

完全的量词表可参考 man grep 手册。

量词

量词允许你指定匹配必须出现的项的出现次数。下表显示了GNU grep支持的限定符:

* 匹配前面的条目零次或多次。? 匹配前面的条目零次或一次。+ 匹配前面的条目一次或多次。{n} 与前面的条目正好匹配n次。{n,} 至少匹配前面的条目n次。{,m} 最多匹配前面的条目m次。{n,m} 匹配前面的条目n到m次。

*(星号)字符与前面的项目匹配零次或多次。以下内容将与“right”、“sright”、“ssright”等匹配:

grep 's*right'

下面是更高级的模式,它匹配以大写字母开头、以句点或逗号结束的所有行。

.*正则表达式匹配任意数量的任意字符:

grep -E '^[A-Z].*[.,]#39; file.txt

?(问号)字符使前面的项目成为可选的,并且它只能匹配一次。下面的内容将同时匹配“bight”和“right”。

?字符使用反斜杠进行转义,因为我们使用的是基本正则表达式:

grep 'b?right' file.txt

下面是使用扩展正则表达式的相同正则表达式:

grep -E 'b?right' file.txt

+(加号)字符与前面的项目匹配一次或多次。下面将匹配“sright”和“ssright”,但不匹配“right”:

grep -E 's+right' file.txt

大括号字符{}允许你指定匹配必须出现的确切数量、上限或下限或范围。

以下内容匹配3到9位之间的所有整数:

grep -E '[[:digit:]]{3,9}' file.txt

交替

术语交替是一个简单的“或”。交替运算符|(竖线)允许你指定不同可能的匹配项,这些匹配项可以是文字字符串或表达式集。此运算符在所有正则表达式运算符中优先级最低。

在下面的示例中,我们将在Nginx日志错误文件中搜索单词fatal、error和critical的所有匹配项:

grep 'fatal|error|critical' /var/log/nginx/error.log

如果使用扩展正则表达式,则不应转义运算符|,如下所示:

grep -E 'fatal|error|critical' /var/log/nginx/error.log

分组

分组是正则表达式的一项功能,它允许将模式分组在一起,并将它们作为一个项目引用。组是使用括号()创建的。使用基本正则表达式时,括号必须用反斜杠()转义。

下面的示例同时匹配“fearless”和“less”。?量词使(fear)组成为可选的:

grep -E '(fear)?less' file.txt

特殊转义符

GNU grep包括几个元字符,这些元字符由一个反斜杠后跟一个常规字符组成。

下表展示了一些最常见的特殊反斜杠表达式:

b 匹配单词边界。< 匹配单词开头的空字符串。> 匹配单词末尾的空字符串。w 匹配一个单词。s 匹配空格。

下面的模式将匹配单独的单词“abject”和“object”。如果嵌入到较大的单词中,它将与单词不匹配:

grep 'b[ao]bjectb' file.txt

写在最后

正则表达式用于文本编辑器、编程语言和命令行工具,如grep、sed和awk。

在搜索文本文件、编写脚本或筛选命令输出时,了解如何构造正则表达式非常有用。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。