了解Linux正则表达式之前,需要了解Linux中通配符和正则的区别:通配符主要用于bash环境,而正则大多数用于Linux三剑客(grep、sed、awk)等中…且Linux中的正则又和其他开发环境下的正则有所区别,咱们暂时研究的还只是Linux环境下的正则…
通配符基础
通配符 描述 示例* 任意多个字符 find . *.sh
? 代表任意一个字符 find . ?.sh
; 连续不同命令分隔 ls m1;ls m2
# 配置文件注释 ####crontab####
| 管道符 find . -type f -name "*.txt" | xargs rm -f
~ 用户的家目录 oldboy~
- 上一次操作目录 su -
$ 变量符号 $PATH
/ 根 /
> 重定向 echo “linux”>oldboy.sh
>> 追加重定向 echo “linux”>>oldboy.sh
< 输入 xargs –n 2 <oldboy.txt
<< 输入重定向 xargs –n 2 <<oldboy.txt
‘ 单引号所见即所得 echo ‘date’==>date
“ 双引号变量置换
echo “date”==>date
num=3
echo “$num”==>3
` 相当于$()
ls ==>oldboy.sh
echo `ls`==>oldboy.sh
{] 内容序列 touch m{1..10}
cp file{,.bak}
! 取反 find . -type f ! -name "*.sh"
&& 并且 &&
|| 或者 ||
正则表达式基础组成
正则表达式 描述 示例^ 匹配行首 ^abc 匹配以abc开头的行
$ 匹配结尾 def$ 匹配以def结尾的行
. 任意一个字符 a.c 匹配abc、adc等
\ 转义字符,还原字符本身含义 \. 代表点本身
* 重复0个或者多个前一个字符 o* 代表0个o或者多个o
.* 任意字符 ^.* 代表以任意字符开头
[abc] 匹配字符集合里的任意一个字符 [a-z][A-Z][0-9] 任意a-z,A-Z,0-9
[^abc] 匹配不包含^后的所有字符 [^abc] 不包含abc的所有字符
a\{n,m\}
a\{n,\}
a\{n\} 匹配重复n到m次a字符
重复至少n次
只重复n次 0\{0,3\} 0重复了0-3次
0\{3,\}重复至少3次0
0\{3\}只重复3次0
() 创建一个用于匹配的子串 ma(tri)?匹配max或maxtrix
扩展的正则表达式(grep –E 或者 egrep)
正则表达式 描述 示例+ 匹配1个或者多个
(*是0个或者多个) a+ 匹配1个到多个a
? 匹配0个或者一个
(.是只有一个) a? 匹配0个a或者1个a
| 同时过滤多个字符 grep –E “3306|1521” /etc/services
元字符