什么是正则表达式正则表达式是一种用于匹配一组字符串中字符组合的模式。 它使用单个字符来描述,匹配一系列符合某个句法规则的字符串。它可以用来验证输入格式,搜索替换文本等正则表达式字符字符作用\转义字符,提示后面的字符就是字面意义。 如\( 就是(^匹配字符串开始的位置。简单来说就是看字符串是否以符合正则表达式的规则开头^匹配字符串结尾。简单来说就是看字符串是否以符合正则表达式的规则结尾.匹配除换行\n之外的任意一个字符*匹配*号前的子表达式/字符0次或者多次[list]list = [char - char], 匹配list中的字符。 char - char是指list的范围,如0-9就是0到9,a-z就是小写a到z[^list]匹配不在list列表中的一个字符,如:[^0-9]匹配任意一位非数字字符{n}n=数字,匹配{n}前面的表达式n次。 如:[0-9]{2}可以匹配10到99的任意数字{n,}匹配{n,}之前的表达式至少n次{n,m}匹配{n,m}之前的表达式至少n到m次|或。 匹配|之前或者之后的表达式其他字符除此之外还有 \d表示所有数字,\w表示所有字符等。但是实测bash不支持这些表达式,只能用[list]这种形式。所以本文不再提及。这也是bash和其他编程语言的区别。在这里踩过坑。示例给定一个包含电话号码列表(一行一个电话号码)的文本文件 file.txt,写一个单行 bash 脚本输出所有有效的电话号码。你可以假设一个有效的电话号码必须满足以下两种格式: (xxx) xxx-xxxx 或 xxx-xxx-xxxx。(x 表示一个数字)你也可以假设每行前后没有多余的空格字符。假设 file.txt 内容如下:987-123-4567123 456 7890(123) 456-7890你的脚本应当输出下列有效的电话号码:987-123-4567(123) 456-7890分析:这里的号码是由数字,-,空格,还有()组成的。首先要注意的坑是"()"在正则里由特殊含义,所以要进行转义。另外这边有两个匹配条件,只要一个成立就是所有都成立,所以需要用或 “|”.第一个条件:[0-9]{3}-[0-9]{3}-[0-9]{4}第二个条件:\([0-9]{3}\) [0-9]{3}-[0-9]{4}用"|"组合[0-9]{3}-[0-9]{3}-[0-9]{4}|\([0-9]{3}\) [0-9]{3}-[0-9]{4}注意:|前后不能有空格,否则会被当成子表达式的一部分进行匹配。这边踩过坑验证:mycontent.txt 987-123-4567 123 456 7890 (123) 456-7890 This is a linecat mycontent.t[0-9]{3}-[0-9]{3}-[0-9]{4}|\([0-9]{3}\) [0-9]{3}-[0-9]{4}"]{3}-[0-9]{4}"输出实用工具最后给个在线的正则匹配验证的网址,可以边写边验证。https://regex101.com/