【现学现忘&Shell编程】— 27.基础正则表达式练习(二)
(3)"."练习
正则表达式.
匹配除了换行符外任意一个字符。
举个例子:
文本test2.txt内容如下:
abc adapt 适应 xyz
abc adopt 采用 xyz
xyz adept 内行 abc
xyz floor 地板 abc
xyz flour 面粉 abc
-
匹配在d和t这两个字母之间一定有两个字符的单词
执行命令:grep "d..t" test2.txt
-
结合
*
使用
执行命令:grep "z.*a" test2.txt
配置的是a和z两个字母之间有任何字符的内容。 -
如果想匹配所有内容,标准写法为
.*
执行命令:grep ".*" test2.txt
(4)"^"和"$"练习
正则表达式"^"匹配行首,"$"匹配行尾。
文本test2.txt内容如下:
abc adapt 适应 xyz
abc adopt 采用 xyz
xyz adept 内行 abc.
xyz floor 地板 abc
xyz flour 面粉 abc
-
^
代表匹配行首,比如^a
会匹配以小写a
开头的行:
执行命令:grep "^a" test2.txt
-
$
代表匹配行尾,如果c$
会匹配以小写c
结尾的行:
执行命令:grep "c$" test2.txt
-
^$
则会匹配空白行:
执行命令:grep "^$" test2.txt
在实际的应用中,我们很少这样使用,一般使用grep
命令的-v
选项进行取反,来过滤掉空白行。(标准方式)
执行命令:grep -v "^$" test2.txt
-
$
结合.
使用
如果我们要匹配以句号.
结果的行,那是否用.$
来进行匹配呢?
我们先来执行一下命令:rep ".$" test2.txt
我们看到是匹配了任意字符结尾的行,只是过滤的空白行。
也就是说正则表达式.$
中的.
是正则符号的意思,表示匹配除了换行符外任意一个字符。
如果我们想匹配以句号.
结束的行,我们需要在.
前加入转义符,把.
变成普通字符串,如:\.$
。
执行命令:grep "\.$" test2.txt
说明:
在使用"^"匹配行首,"$"匹配行尾的时候,如果使用的是特殊符号开头或者结尾,我们需要使用转义符进行转义,再进行匹配。
(5)"[ ]"练习
正则表达式"[ ]"匹配中括号中指定的任意一个字符,只匹配一个字符。(注意只能匹配一个字符。)
比如[abc]
要么会匹配一个a字符,要么会匹配一个b字符,或者要么会匹配一个c字符。
文本test.txt
abc adapt 适应 abc
ABC adopt 采用 xyz
abc adept 内行 XYZ
123 floor 地板 ABC
123 flour 面粉 123
-
配置adapt、adopt、adept这三个近似的单词
执行命令:grep "ad[ae]pt" test2.txt
可以看出[]
比.
的匹配范围更精准,请根据实际情况,按需使用。 -
[0-9]
会匹配任意一个数字
执行命令:grep "[0-9]" test2.txt
-
[A-Z]
会匹配一个大写字母
执行命令:grep "[A-Z]" test2.txt
-
^[a-z]
代表匹配用小写字母开头的行
执行命令:grep "^[a-z]" test2.txt
(6)"[^]"练习
正则表达式[^]
匹配除中括号的字符以外的任意一个字符。
就相当于在[]
中的内容进行取反。
文本test.txt
abc adapt 适应 abc
ABC adopt 采用 xyz
abc adept 内行 XYZ
123 floor 地板 ABC
123 flour 面粉 123
-
不匹配数字
执行命令:grep "[^0-9]" test2.txt
-
不匹配以数字开头的行
执行命令:grep "^[^0-9]" test2.txt
-
不匹配英文
执行命令:rep "[^a-zA-Z]" test2.txt
-
匹配不以英文结尾的行
执行命令:rep "[^a-zA-Z]$" test2.txt