美文网首页Linux 学习Linux
从零开始学习Linux(四十):Shell编程之正则表达式

从零开始学习Linux(四十):Shell编程之正则表达式

作者: 通靈鹿小六 | 来源:发表于2020-12-31 06:45 被阅读0次

    1、正则表达式与通配符

    正则表达式:用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令都可以支持正则表达式。

    通配符:用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。

    2、基础正则表达式

    元字符 作用
    * 前一个字符匹配0次或任意多次;
    . 匹配除了换行符外任意一个字符;
    ^ 匹配行首。例如:^hello会匹配以hello开头的行;
    $ 匹配行尾。例如:hello&会匹配以hello结尾的行;
    [] 匹配中括号中指定的任意一个字符,只匹配一个字符。 例如:[abcd] 匹配abcd中任意一个字母,[0-9] 匹配任意一位数字, [a-z][0-9] 匹配小写和一位数字构成的两位字符;
    [^] 匹配除中括号的字符以外的任意一个字符。例如:[^0-9] 匹配任意一位非数字字符,[^a-z] 表示任意一位非小写字母;
    \ 转义符。用于将特殊符号的含义取消。
    \{n\} 表示其前面的字符恰好出现n次。例如:[0-9]{4} 匹配4位数字;
    \{n,\} 表示其前面的字符出现不小于n次。例如: [0-9]{2,} 表示两位及以上的数字;
    \{n,m\} 表示其前面的字符至少出现n次,最多出现m次。例如: [a-z]{6,8} 匹配6到8位的小写字母;

    3、测试正则表达式

    创建文件test_rule.txt,并且编辑内容。如下图所示:

    3.1、* 前一个字符匹配0次,或任意多次

    命令1:grep "h*" test_rule.txt
    作用:匹配所有内容,包括空白行;

    命令2:grep "hh*" test_rule.txt
    作用:匹配至少包含有一个h的行;

    命令3:grep "hhh*" test_rule.txt
    作用:匹配至少包含两个连续h的字符串;

    3.2、. 匹配除了换行符外任意一个字符

    命令:grep "y..r" test_rule.txt
    作用:匹配在y和r这两个字母之间一定有两个字符的字符串;

    3.3、^匹配行首

    命令:grep "^m" test_rule.txt
    作用:搜索以m开头的行

    3.4、$匹配行尾

    命令:grep "h$" test_rule.txt
    作用:搜索以h结尾的行

    前面在 从零开始学习Linux(三十一):Shell脚本的执行方式 章节中提到过windows下shell脚本和Linux系统下shell脚本格式不同的问题。Linux系统下shell脚本格式是以$为行尾的,但是Windows下面shell脚本格式是以^M$为行尾的。

    通过命令"cat -A test_rule.txt"可以查看,如下图所示:

    如果是以^M$为行尾的,使用命令"grep "h$" test_rule.txt",是匹配不到任何数据的。

    因此,当使用$匹配行尾且没有匹配到任何数据的时候,先考虑一下是否是由于文件格式的原因导致的。如果格式不一样,可以使用前面章节提到的命令转换一下文件格式。

    3.5、[]匹配括号中指定的任意一个字符,只匹配一个字符

    命令:grep "h[eh]h" test_rule.txt
    作用: 匹配h和h字母中为e和h的行数据。

    3.6、 [^] 匹配除中括号的字符以外的任意一个字符

    命令:grep "^[^a-z]" test_rule.txt
    作用:匹配不以小写字母开头的行

    3.7、\ 转义符

    命令:grep "\!$" test_rule.txt
    作用:搜索以!结尾的行

    3.8、\{n\} 表示其前面的字符恰好出现n次

    命令:grep "o\{2\}" test_rule.txt
    作用:匹配连续出现2次o的行数据

    3.9、\{n,m\} 匹配其前面的字符至少出现n次最多出现m次

    命令:grep "o\{3,5\}" test_rule.txt
    作用:匹配连续出现最少3次,最多5次的行数据

    相关文章

      网友评论

        本文标题:从零开始学习Linux(四十):Shell编程之正则表达式

        本文链接:https://www.haomeiwen.com/subject/yxdznktx.html