首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash脚本grep -E“[A,A,0-9\.\--]{2,}”/etc/主机名

Bash脚本grep -E“[A,A,0-9\.\--]{2,}”/etc/主机名
EN

Unix & Linux用户
提问于 2018-03-25 20:24:56
回答 2查看 24.7K关注 0票数 6

我一直在写剧本,试着理解这里,这是一个我无法理解的作品。

在这段代码中,我了解到grep -E "[a-z,A-Z,0-9\.\-]{2,}" /etc/hostname试图从/etc/hostname获取数据。任何以A或A或数字开头的东西都可以是。

但是,首先:

代码语言:javascript
复制
\.\-]{2,}

这部分我解决不了。有人能解释一下这是什么原因吗?

EN

回答 2

Unix & Linux用户

发布于 2018-03-25 23:10:15

下面是正则表达式的含义,从左到右:

代码语言:javascript
复制
[

字符集(或字符类)的开始。它与集合中的一个字符匹配。

代码语言:javascript
复制
a-z,A-Z,0-9

在字符集内,意味着匹配任意一个字符a-zA-Z0-9。这里的逗号实际上是可选的,除非你试图匹配一个逗号。

代码语言:javascript
复制
\.\-

.是一个与任何字符匹配的特殊字符,但在字符集中它没有特殊的含义,不需要转义。这里的-不必转义,如果它是集合中的第一个或最后一个字符,它与文字-匹配,它只有在一个集合中的另外两个字符之间时才具有特殊的意义。

代码语言:javascript
复制
]

字符集的结尾。该集合匹配任何一个字符a-zA-Z0-9.-

代码语言:javascript
复制
{2,}

是一个量词。这意味着以前的正则表达式将被匹配2次或更多次。

因此,可以将该命令简化为:

代码语言:javascript
复制
grep -E "[a-zA-Z0-9.-]{2,}" /etc/hostname

当与-P标志一起使用时,grep将模式解释为Perl正则表达式。Perl正则表达式与Python几乎完全相同。在我看来,这是一个比-E更强大的模式。在Perl模式下,您的命令变成:

代码语言:javascript
复制
grep -P "[a-zA-Z\d.-]{2,}" /etc/hostname
票数 6
EN

Unix & Linux用户

发布于 2018-03-25 20:37:44

{2,}是一个量词,在这种情况下,它将匹配从2到尽可能多的[]列表中字母的实例。

\.\-将匹配“-”或“.”。这两个字符通常是特殊的,通常需要用\转义。但是在组[]中,点并不特殊,所以在这种情况下不需要\。此外,-是一个范围指示器,如果它是组中的第一个或最后一个,则不是特殊的。

所以,最后你可以用:

代码语言:javascript
复制
[,a-zA-Z0-9.-]{2,}
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/433478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档