本文的正则表达式是grep命令的规范,与ls、find等命令的规范有所差别。
不管在什么命令中,正则表达式最好使用双引号引起来,防止被当成是命令。
grep元字符集
\ :通常用于打开或关闭后续字符的特殊含义,如\(...\)与\{...\}
^ :锚定行的开始如:'^grep'匹配所有以grep开头的行。
$ :锚定行的结束如:'grep$'匹配所有以grep结尾的行。
. :匹配一个非换行符的字符如:'gr.p'匹配gr后接一个任意字符,然后是p。
* :匹配零个或多个先前字符。 .*一起用代表任意长度任意字符。
[] :匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^] :匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
\(..\) :标记匹配字符,如'\(love\)',love被标记为1。如\(ab\).*\1 : 指匹配ab组合的两次重现,中间可存在任意数目的字符。可以将最多9个独立的子模式存储在单个模式中
x\{m\}: 重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。如果x是不确定字符,比如[:digit:]\{5\}表示出现5个数字
x\{m,\} :重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
\w :匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
\b :单词锁定符,如:'\bgrep\b'只匹配grep。
示例
pshiz@163.com
pshiz@163com
pshiz@163.com.
pshiz@
@163.com
pshiz@mail2.sysu.edu.cn
pshiz@126.com
yangr@163.com
pp@163.com
1)找出含有163的行
> grep "163" first.sh
2)找出以cn结尾的行
> grep "cn$" first.sh
3)找出其中字符长度为7的行
> grep "^.......$" first.sh
4)找出163邮箱格式正确的行(用户名为数字、字母和下划线)
> grep "^[[:digit:][:alpha:]_]\{1,}@163\.com" first.sh
注意:"[[:digit:][:alpha:]_]*@163\.com"是不对的,@163.com这一行也会被包含
5)找出邮箱格式正确的行(假设格式是xx@xx.xx.xx,每个xx都是数字、字母和下划线的组合)
> grep "^[[:digit:][:alpha:]_]\{1,\}@\([[:digit:][:alpha:]_]\{1,\}\.\)\{1,\}[[:digit:][:alpha:]_]\{1,\}$" first.sh
易错:切记开头符号^与结束符号$的使用
原文链接:https://www.f2er.com/regex/361357.html