【现学现忘&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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容