我一直在写剧本,试着理解这里,这是一个我无法理解的作品。
在这段代码中,我了解到grep -E "[a-z,A-Z,0-9\.\-]{2,}" /etc/hostname试图从/etc/hostname获取数据。任何以A或A或数字开头的东西都可以是。
但是,首先:
\.\-]{2,}这部分我解决不了。有人能解释一下这是什么原因吗?
发布于 2018-03-25 23:10:15
下面是正则表达式的含义,从左到右:
[字符集(或字符类)的开始。它与集合中的一个字符匹配。
a-z,A-Z,0-9在字符集内,意味着匹配任意一个字符a-z、A-Z或0-9。这里的逗号实际上是可选的,除非你试图匹配一个逗号。
\.\-.是一个与任何字符匹配的特殊字符,但在字符集中它没有特殊的含义,不需要转义。这里的-不必转义,如果它是集合中的第一个或最后一个字符,它与文字-匹配,它只有在一个集合中的另外两个字符之间时才具有特殊的意义。
]字符集的结尾。该集合匹配任何一个字符a-z或A-Z或0-9或.或-。
{2,}是一个量词。这意味着以前的正则表达式将被匹配2次或更多次。
因此,可以将该命令简化为:
grep -E "[a-zA-Z0-9.-]{2,}" /etc/hostname当与-P标志一起使用时,grep将模式解释为Perl正则表达式。Perl正则表达式与Python几乎完全相同。在我看来,这是一个比-E更强大的模式。在Perl模式下,您的命令变成:
grep -P "[a-zA-Z\d.-]{2,}" /etc/hostname发布于 2018-03-25 20:37:44
{2,}是一个量词,在这种情况下,它将匹配从2到尽可能多的[]列表中字母的实例。
\.\-将匹配“-”或“.”。这两个字符通常是特殊的,通常需要用\转义。但是在组[]中,点并不特殊,所以在这种情况下不需要\。此外,-是一个范围指示器,如果它是组中的第一个或最后一个,则不是特殊的。
所以,最后你可以用:
[,a-zA-Z0-9.-]{2,}https://unix.stackexchange.com/questions/433478
复制相似问题