正则表达式:
REGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符。
基于文档内容,以下是正则表达式中每个字符的详细用法笔记,并附有示例:
元字符(字符匹配)
-
.
:匹配任意单个字符,包括汉字。- 示例:
grep 'r..t' /etc/passwd
匹配包含 “r” 后跟任意两个字符,再跟 “t” 的行。
- 示例:
-
()
:通常表示转义符,只表示字面上的(
和)
。- 示例:
echo "abc" | grep "\(abc\)\{3\}"
匹配字符串 “abcabcabc”。
- 示例:
-
[]
:匹配指定范围内的任意单个字符,如[dn]
、[0-9]
、[a-z]
等。- 示例:
ls | grep '[a-z].txt'
匹配以小写字母开头,后跟 “.txt” 的文件名。
- 示例:
-
[^]
:匹配指定范围外的任意单个字符,如[^dn]
、[^a-z]
。- 示例:
ls | grep '[^a-z].txt'
匹配不以小写字母开头的 “.txt” 文件名。
- 示例:
-
[:alnum:]
:匹配字母和数字。- 示例:
grep '[[:alnum:]]+' file.txt
匹配包含至少一个字母或数字的行。
- 示例:
-
[:alpha:]
:匹配任何英文大小写字符。- 示例:
grep '[[:alpha:]]+' file.txt
匹配包含至少一个字母的行。
- 示例:
-
[:lower:]
:匹配小写字母。- 示例:
grep '[[:lower:]]+' file.txt
匹配包含至少一个小写字母的行。
- 示例:
-
[:upper:]
:匹配大写字母。- 示例:
grep '[[:upper:]]+' file.txt
匹配包含至少一个大写字母的行。
- 示例:
-
[[:blank:]]
:匹配空白字符(空格和制表符)。- 示例:
grep '[[:blank:]]+' file.txt
匹配包含至少一个空白字符的行。
- 示例:
-
[:space:]
:匹配各种类型的空白字符。- 示例:
grep '[[:space:]]+' file.txt
匹配包含至少一个空白字符的行。
- 示例:
-
[:cntrl:]
:匹配不可打印的控制字符。- 示例:
grep '[[:cntrl:]]+' file.txt
匹配包含至少一个控制字符的行。
- 示例:
-
[:digit:]
:匹配十进制数字。- 示例:
grep '[[:digit:]]+' file.txt
匹配包含至少一个数字的行。
- 示例:
-
[:xdigit:]
:匹配十六进制数字。- 示例:
grep '[[:xdigit:]]+' file.txt
匹配包含至少一个十六进制数字的行。
- 示例:
-
[:graph:]
:匹配可打印的非空白字符。- 示例:
grep '[[:graph:]]+' file.txt
匹配包含至少一个可打印非空白字符的行。
- 示例:
-
[:print:]
:匹配可打印字符。- 示例:
grep '[[:print:]]+' file.txt
匹配包含至少一个可打印字符的行。
- 示例:
-
[:punct:]
:匹配标点符号。- 示例:
grep '[[:punct:]]+' file.txt
匹配包含至少一个标点符号的行。
- 示例:
-
\w
:匹配单词构成部分,等价于[_[:alnum:]]
。- 示例:
grep '\w+' file.txt
匹配包含至少一个单词字符的行。
- 示例:
-
\W
:匹配非单词构成部分,等价于[^_[:alnum:]]
。- 示例:
grep '\W+' file.txt
匹配包含至少一个非单词字符的行。
- 示例:
-
\S
:匹配任何非空白字符。- 示例:
grep '\S+' file.txt
匹配包含至少一个非空白字符的行。
- 示例:
-
\s
:匹配任何空白字符。- 示例:
grep '\s+' file.txt
匹配包含至少一个空白字符的行。
- 示例:
表示次数
-
*
:匹配前面的字符任意次,包括0次。- 示例:
echo "google" | grep 'go\{2\}gle'
匹配 “google”。
- 示例:
-
.*
:匹配任意长度的任意字符,不包括0次。- 示例:
echo "gdadadadgle" | grep "g.*gle"
匹配 “gdadadadgle”。
- 示例:
-
\?
:匹配其前面的字符出现0次或1次。- 示例:
echo "ggle" | grep "go\?gle"
匹配 “ggle”。
- 示例:
-
\+
:匹配其前面的字符出现最少1次。- 示例:
echo "google" | grep "go\+gle"
匹配 “google”。
- 示例:
-
\{n\}
:匹配前面的字符=n次。- 示例:
echo "google" | grep 'go\{2\}gle'
匹配 “google”。
- 示例:
-
\{m,n\}
:匹配前面的字符至少m次,至多n次。- 示例:
echo "goooooogle" | grep 'go\{2,5\}gle'
匹配 “goooooogle”。
- 示例:
-
\{,n\}
:匹配前面的字符至多n次。- 示例:
echo "goooooogle" | grep 'go\{,5\}gle'
匹配 “goooooogle”。
- 示例:
-
\{n,\}
:匹配前面的字符至少n次。- 示例:
echo "goooooogle" | grep 'go\{2,5\}gle'
匹配 “goooooogle”。
- 示例:
位置锚定
-
^
:行首锚定。- 示例:
grep "^[^#]" /etc/fstab
匹配不以 “#” 开头的行。
- 示例:
-
$
:行尾锚定。- 示例:
grep "^google$" test.txt
只匹配 “google” 这个单词。
- 示例:
-
^$
:匹配空行。- 示例:
grep "^[[:space:]]*$" /etc/fstab
匹配空白行。
- 示例:
-
\<
或\b
:词首锚定。- 示例:
echo "hello-123" | grep "\b123"
匹配包含 “123” 的单词。
- 示例:
-
\>
或\b
:词尾锚定。- 示例:
echo "hello-123" | grep "\bhello"
匹配包含 “hello” 的单词。
- 示例:
分组或其他
-
()
:分组。- 示例:
echo "1abc" | grep "1\|2abc"
匹配 “1abc”。
- 示例:
-
\|
:或者。- 示例:
echo "1abc2abc" | grep "\(1\|2\)abc"
匹配 “1abc” 或 “2abc”。
- 示例:
扩展正则表达式
-E
:使用扩展正则表达式。- 示例:
grep -E "[0-9]+-[0-9]+" number.txt
匹配格式为 “数字-数字” 的字符串。
- 示例: