使用基本Linux正则表达式的示例
Linux正则表达式在处理从文件中提取文本,对命令结果的输出进行排序,对某些任务进行脚本编写等工作时非常有用。
我相信正则表达式有点难以掌握,因为它们可以以多种方式使用。
不赞成使用某些表达式,而为了保持向后兼容性,仍保留一些表达式。
我们将在此处介绍一些使用正则表达式的最常用和非常有用的方法。
1.使用锚字符^和$。
^(脱字符号)用于匹配行首的字符。
$(美元符号)用于匹配行 tail的字符。
让我们看一个例子。
我有一个名为“测试”的文件,其中包含以下内容
因此,要grep出以字符“ a”开头的行,我将执行以下操作。
[root@myvm1 ~]# grep "^a" testing a abc abcd abcdef abcdefg
现在要删除没有字符的行或者说空行,我们将执行以下操作。
[root@myvm1 ~]# grep -c "^$" testing 3
现在只需简单地在grep中使用-c选项进行计数,grep就会在屏幕上输出空白行(这是无用的)。
“ ^ a”将输出带有bigininng的行
“ a $”将匹配以a结 tail的行
“ ^^”将匹配行中包含插入符号的行
2.找到仅一个字符的行
[root@myvm1 ~]# grep "^.$" testing a d
上面显示的示例中带有“ ^。
$”的此处为“.”字符将匹配一个字符,因此简而言之,上述表达式将匹配一个字符的行。
3.匹配介于字符之间或者字符范围内的字符
匹配一系列字符可以在表达式[...]的帮助下完成
如果要匹配仅包含一个数字的任何行,则可以使用以下表达式进行匹配。
[root@myvm1 ~]# grep "^[0123456789]$" testing [root@myvm1 ~]#
在我们的例子中,它没有显示任何输出,因为我们的文件“ testing”没有包含以数字开头的任何行,并且该行中仅包含一个数字。
现在,如果我们要匹配一个字母,数字或者符号的字符,我们可以执行以下操作。
[root@myvm1 ~]# grep "[0-9a-zA-Z]" testing a abc abcd abcdef abcdefg sd sd d
请注意,输出未在文件中显示空行。
在继续之前,有一些要理解的要点。
[0-9]匹配任何数字
[^ 0-9]-将匹配任何字符而不是数字((当放在[]方括号内时,^的含义发生变化,在squire方括号外则表示行的开头)
4,在正则表达式中使用星号
字符“ *”匹配零个或者多个。
因此我们可以说正则表达式[0-9] *将匹配零个或者多个数字结果。
让我们看一个例子。
[root@myvm1 ~]# grep "^a*" testing a abc abcd abcdef abcdefg sd sd d
因为*表达式将匹配零个或者多个匹配所有行的匹配项,结果类似于“cat 测试”
5.指定正则表达式中的最大出现次数
现在*将grep输出匹配零次或者多次的模式,但是没有可其中指定的上限或者下限。
要在搜索模式时指定上限和下限,我们可以使用“ \ {”和“ }”。
现在让我们了解为什么要使用反斜杠。
为了匹配一个时期,我们需要按照以下方式进行匹配
“ .”因为我们需要首先关闭简单“.”的含义。
星号与*匹配,否则shell会认为我们发现了零个或者多个出现(*的原始含义)
[root@myvm1 ~]# grep "s\{1,2\}" testing sd sd
上面显示的示例将匹配包含一个或者最多两个出现次数或者“ s”的任何行,可以使用\ {,和}设置下限和上限。
6.匹配词。
匹配的单词可以使用字符“ \ <”和“ >”来完成。
[root@myvm1 ~]# grep "\<abc\>" testing abc
也可以使用正则表达式“ abc”完成单词的搜索,但也可以匹配abcdef中的abc。
我将显示使用“ abc”而不是“ \ <abc >”的示例。
[root@myvm1 ~]# grep "abc" testing abc abcd abcdef abcdefg
7,在正则表达式中使用+ operator
就像*字符匹配零个或者多个结果,+字符匹配提到的字符之一。
例如。
[root@myvm1 ~]# grep "[a]\+" testing a abc abcd abcdef abcdefg
8.搜索以不同模式结 tail的文件。
假设我们要在几个文件中搜索某些文件,这些文件被命名为messages,messages.1,messages.2等。
我们可以通过以下技术来做到这一点。
[root@myvm1 log]# grep usb messa*.[0-9]
通过上述方法,我们只能在以messa开头并以数字结 tail的文件中搜索单词。
9.使用“ |”或者搜索模式中的运算符。
找出使用b或者s放大的行,我们需要使用|正则表达式中可用的运算符。
[root@myvm1 ~]# grep "^[b|s]" testing sd sd
在上面的示例中,文件“ testing”中只有两行以s开头,没有行以b开头