Shell中使用正则表达式处理文本的命令有如下工具:
命令 | 描述 |
---|---|
grep | 默认不支持扩展表达式,加-E 选项开启ERE。如果不加-E ,此时使用花括号时要加转义符:\{\} |
egrep | 支持基础和扩展表达式 |
awk | 支持基础和扩展表达式 |
sed | 默认不支持扩展表达式,加-r 选项开启ERE。如果不加-r ,此时使用花括号时要加转义符:\{\} |
注:-E
选项为扩展的正则表达式:支持+、?、|、()
.
匹配除换行符(\n)之外的任意单个字符
echo -e "123\n456" | grep "1.3" # 显示 123
^
匹配以xxx字符(串)开头所在的行
echo -e "abc\nxyz" | grep "^ab" # 显示 abc
$
匹配以xxx字符(串)结尾所在的行
echo -e "abc\nxyz" | grep "z$" # 显示 xyz
*
匹配前一个字符0个或多个
echo -e "x\nxo\nxoo\no\noo" |grep "xo*" # 显示 x/xo/xoo
+
匹配前一个字符1个或多个
# grep -E 该选项为拓展的正则表达式,支持 + ? | 和 ()
echo -e "abc\nabbc\nac" | grep -E "ab+c" # 显示 abc/abbc
?
匹配前一个字符0个或1个
echo -e "abc/abbc/ac" | grep -E "ab?c" # 显示 abc/ac
[ ]
匹配中括号中的任意一个字符
echo -e "abd\ncdf\nghj" | grep "[ac]" # 显示 abd/cdf
[.-.]
匹配中括号中范围内的任意一个字符
echo -e "abc\nxyz" | grep "[a-z]" # 显示 abc/xyz
[^.]
匹配非中括号中字符(串)之外的任意一个字符(串)
echo -e "a\nb\nc" | grep "[^a]" # 显示 b/c
^[^.]
匹配以非中括号中字符(串)开头的行
echo -e "abc\nxyz" | grep "^[^a]" # 显示 xyz
{n,}或{n}
匹配前面的字符至少 n次
echo -e "abc\nabcc\nabccc\nabcccc" | grep -E "c{2}" # 显示 abcc/abccc/abcccc
{n,m}
匹配前面的字符至少 n次至多m次
# -w 只选择与整个单词相匹配的行
# 注意m与前面的逗号之间没有空格
echo -e "abc\nabcc\nabccc\nabcccc" | grep -E -w "abc{2,3}" # 显示 abcc/abccc
\<
边界符,匹配行的开始
# 匹配以ab开始的行
echo -e "abc\nabcc\ncab" | grep -E "\<ab" # 显示 abc/abcc
\>
边界符,匹配行的结尾
# 匹配以ab结束的行
echo -e "abc\nabcc\ncab" | grep -E "bc\>" # 显示 abc
|
匹配竖杠两边两个字符中的任意一个
echo -e "a\nb\nc" | grep -E "b|c" # 显示 b/c
\
转义符,将特殊符号转成字面意义上的字符
echo -e "1.2" | grep -E "1\.2" # 显示 1.2
Posix字符
Posix字符 | 描述 |
---|---|
[:alnum:] | 等效于[a-zA-Z0-9] |
[:alpha:] | 等效于[a-zA-Z] |
[:lower:] | 等效于[a-z] |
[:upper:] | 等效于[A-Z] |
[:digit:] | 等效于[0-9] |
[:lower:] | 等效于[a-z] |
[:space:] | 匹配任意空白字符,等效于[\t\n\f\v] |
[:graph:] | 非空白字符 |
[:blank:] | 空格与定位字符 |
[:contrl:] | 控制字符 |
[:print:] | 可显示的字符 |
[:punct:] | 标点符号字符 |
[:xdigit:] | 十六进制 |
示例 | echo -e "123\n1234a" | grep "[[:digit:]]" # 匹配所有包含数字的行 |
支持的特殊字符 | 描述 |
---|---|
\w | 匹配任意数字和字母, 等效于[a-zA-Z0-9_] |
\W | 与\w 相反,等效于[^a-zA-Z0-9_] |
\b | 匹配字符串开始或结束,等效于\< 和\> |
\s | 匹配任意的空白字符 |
\S | 匹配任意的非空白字符 |
示例 | echo -e "Hello\n123" | grep "\w" # 匹配Hello和123 |
空白符 | 描述 |
---|---|
\n | 换行符 |
\r | 回车符 |
\t | 水平制表符 |
\v | 垂直制表符 |
\0 | 空值符 |
\b | 退格符 |
参考:《Shell入门到精通》作者:李振良