Linux Bash之正则表达式

Posted coffee tea or me

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux Bash之正则表达式相关的知识,希望对你有一定的参考价值。

首先注意:正则表达式与通配符是完全不同的概念。通配符(wildcard)代表的是 Bash 操作接口的一个功能,而正则表达式是一种字符串处理的表示方式,一定要区分开来。

正则表达式(Regular Expression)是通过一些特殊字符的排列,用以查找/替换/删除一行或多行文字字符串。

也即是说,正则表达式是用在字符串处理上的一项表达式,它不是一个工具程序,而是一个字符串处理的标准依据,如果我们想以正则表达式的方式处理字符串,就要使用支持正则表达式的工具程序,如 vim、sed、awk、grep 等。

A regular expression is a pattern that describes a set of strings.
regexp are constructed analogously to arithmetic expressions, by using various operators to combine smaller expressions.
grep understands three different regexp syntax: “basic” (BRE), “extended” (ERE) and “perl” (PCRE).
In GNU grep, there is no difference in available functionality between basic and extended syntaxes.

首先介绍第一部分,基本正则表达式的基本组成部分,见表1-1,如果想要在大部分机器上都可以使用的可移植脚本,只使用基本组成部分是一个好的选择。

基本正则与扩展正则的区别在于,基本正则中,字符(? + | {} ()  )被解释为普通字符,也即其字面意思,如果要使用其对应的特殊含义,如使用  ()  表示选项列表,  |  表示选项等,需要加反斜杠  \\  转义。

而在扩展正则中,默认字符(  ? + | {} ()  )被解释为特殊含义,如果要使用其对应的普通字符含义,需要加反斜杠  \\  转义。

然后来看第二部分,对于 Shell 中的 POSIX 字符,如表1-2所示,基本上可以根据符号猜出其含义,即所谓望文生义,比较容易记忆。这部分对基本正则,扩展正则以及 Perl 格式的正则表达都是一样的,特定的符号特定的含义。

Such certain named classes of characters are predefined within bracket expressions. Their names are self explanatory.

 

接下来是第三部分,元字符及其含义和使用示例,如表1-3所示,这里也只是给出基本正则和扩展正则中支持的元字符,对于Perl风格的正则能支持的更多的字符在稍后的部分展示。 

The symbol \\b matches the empty string at the edge of a word, and \\B matches the empty string provided it\'s not at the edge of a word.
The symbol \\w is a synonym for [_[:alnum:]] and \\W is a synonym for [^_[:alnum:]].
The symbols \\< and \\> respectively match the empty string at the beginning and end of a word.

第四部分,对于扩展正则以及 Perl 风格的正则,其所支持的功能更多更复杂,使用起来也是更方便,其在基本正则的基础上又有一些新的表示和约定,如表1-4所示。

最后一部分, Perl 风格的正则相对于基本正则和扩展正则而言能支持更丰富的元字符,如表1-5所示,有了更多的定义和用法。

参考资料

[1] Shell正则表达式

[2] ASCII

以上是关于Linux Bash之正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

Linux三剑客之grep命令详解

linux shell:bash 正则表达式判断操作符 =~ 的问题

Bash 脚本:正则表达式基础篇 | Linux 中国

使用 linux 和 AIX 的正则表达式替换 bash 脚本中的字符串

Linux 第17天 bash,find,正则,命令历史

linux综合顺练(涉及管道,正则,重定向用户及组管理权限管理等相关知识点)