正则表达式:Regular Expression, REGEXP
Basic REGEXP: 基本正则表达式
Extended REGEXP:扩展
基本正则表达式:
元字符:
. :匹配任意单个字符
[] :匹配指定范围内任意单个字符
[^]:匹配指定范围之外的任意单个字符
字符集合:[:digit:],[:lower:],[:upper:],[:punct:],[:space:],[:alpha:],[:alnum:]
eg: (查找1.txt中以数字结尾,数字前包含至少一个空格的文本)
grep '[[:space:]]\{1,\}[[:digit:]]$' ~/test/1.txt
字符匹配次数(贪婪模式):
* :匹配其前面的字符任意次
.* :任意长度的任意字符
\?:匹配其前面的字符1次或0次
\{m,n\}:匹配其前面的字符至少1次,至多n次
eg: grep 'a\{1,3\}b' 1.txt
\{1,\} \{0,3\}
位置锚定:
^ :锚定行首,此字符后面的任意内容必须出现在行首
eg: grep '^r..t' /etc/passwd
$ :锚定行尾,此字符前面的任意内容必须出现在行尾
eg: grep 'b..h$' /etc/passwd
^$ :空白行
\<或\b:锚定词首,其后面的任意字符必须作为单词的首部出现
eg: grep 'root\b' ~/test/1.txt
\>或\b:锚定词尾,其后面的任意字符必须作为单词的尾部出现
eg: grep '\broot' ~/test/1.txt
\<root\>
分组: \(\)
\(ab\)*
后向引用
\1: 引用第一个左括号以及与之对应的右括号所包含的所有内容
\2:
\3:
eg:查找1.txt中包含任意数字且以该数字结尾的行
grep '\([0-9]\).*\1$' ~/test/1.txt
扩展正则表达式:grep -E = egrep
元字符:
. :匹配任意单个字符
[] :匹配指定范围内任意单个字符
[^]:匹配指定范围之外的任意单个字符
字符匹配次数(贪婪模式):
* :匹配其前面的字符任意次
.* :任意长度的任意字符
? :匹配其前面的字符1次或0次
+ :匹配其前面的至少字符1次, 同\{1,\}
eg: grep -E '^[[:space:]]+' ~/test/1.txt
{m,n}:匹配其前面的字符至少1次,至多n次
eg: grep 'a\{1,3\}b' 1.txt
\{1,\} \{0,3\}
位置锚定(相同):
^ :锚定行首,此字符后面的任意内容必须出现在行首
eg: grep '^r..t' /etc/passwd
$ :锚定行尾,此字符前面的任意内容必须出现在行尾
eg: grep 'b..h$' /etc/passwd
^$ ;空白行
\<或\b:锚定词首,其后面的任意字符必须作为单词的首部出现
eg: grep 'root\b' ~/test/1.txt
\>或\b:锚定词尾,其后面的任意字符必须作为单词的尾部出现
eg: grep '\broot' ~/test/1.txt
\<root\>
分组: ()
(ab)
\1: 引用第一个左括号以及与之对应的右括号所包含的所有内容
\2:
\3:
或者: |
eg: C|cat :C或者cat (C|c)at :Cat或者cat
grep -E '(C|c)at' ~/test/1.txt
fgrep: fast grep: 不支持正则表达式