AI智能
改变未来

12.Shell之正则表达式+总结+案例

小破站学习笔记

正则表达式是什么

字符模式 缩写RE
用于查找过程中匹配指定字符
许多程序设计语言都支持正则表达式进行字符串操作
正则表达式概念最初由Unix中的工具软件普及开的,如

sed grep

支持正则表达式的程序如:

locate find vim grep sed awk

正则可以干什么

匹配邮箱 匹配身份证号码 手机号 银行卡
匹配某些特定字符串 做特定处理

正则中的名词解释

  • 元字符
    指那些正则表达式中具有特俗意义的专用字符 如点. 星* 问号? 等
  • 前导字符

位于元字符前面的一个字符 ab

c

* ao

o

.

第一类正则表达式

  • 普通常用元字符
.	匹配除了换行符以外的任意单个字符*	前导字符出现0次或者连续多次.*	任意长度字符^	行首 以..开头$	行尾 以..结尾^$	空行[]	匹配括号里任意单个字符或一组单个字符[^]	匹配不包含括号内任一单个字符或者一组单个字符^[]	匹配以括号里任意单个字符或一组单个字符开头^[^]	匹配不以括号里任意单个字符或一组单个字符开头################################################grep \'g.\' 1.txt匹配包含g和后所跟任意单个字符的行 (grep 行过滤)grep \'go*\' 1.txt匹配g和o0个或多个的行grep \'go.*\' 1.txt匹配go和后面任意长度字符的行grep \'^gel\' 1.txt匹配以gel开头的行grep \'abc$\' 1.txt匹配以abc结尾的行grep \'^[abc]\' 1.txt匹配以a或b或c开头的grep \'^[abc]\' 1.txt匹配不以a或b或c开头的
  • 其他常用元字符
\\<	取单词的头\\>	取单词的尾\\<\\>	精确匹配\\{n\\}	匹配前导字符连续出现n次\\{n,\\}	匹配前导字符至少出现n次\\{n,m\\}	匹配前导字符出现n次与m次之间\\(\\)	保存被匹配的字符\\d	匹配数字 grep -P  要加P		[0-9]\\w	匹配字母数字下划线 grep -P 要加P		[a-zA-Z0-9_]\\s	匹配空格 制表符 换页符 grep -P 要加P		[\\t\\r\\n]##############################################grep \'\\<hel\' 1.txt匹配里面单词以hel为头grep \'rld\\>\' 1.txt匹配里面单词以rld为尾#匹配内容里单词的头或尾 不是单词不匹配grep \'\\<hello\\>\' 1.txt精确匹配hello这个单词 注意是单词grep -w hello 1.txt 和这个精确匹配差不多grep \'go\\{2\\}\' 1.txt匹配g和前导字符o连续出现2次的grep \'go\\{2,\\}\' 1.txt匹配g和前导字符o至少出现2次grep \'go\\{2,4\\}\' 1.txt匹配g和前导字符o出现2-4次grep \'[0-9]\\{3\\}\\.[0-9]\\{3\\}\\.[0-9]\\{1\\}\\.[0-9]\\{1\\}\' 1.txt匹配ip 192.168.0.1 [0-9]表示数字 3 3 1 1 出现次数 \\. 转义.vim:%S/10.10.1.1/10.10.1.2/g:%s/\\(10.10.1\\).1/\\1.254/g:%s/helloworld yourself/hiworld myself/g:%s/hello\\(world \\)your\\(self\\)/hi\\1my\\2/g只替换掉不同的部分
  • 扩展类正则常用字符
    比较特殊 比如
    grep

    要用到 要加

    -E

    或者用

    egrep

    sed

    要用的话 必须加

    -r
+	匹配一个或多个前导字符	grep -E bo+ 匹配boo,bo?	匹配零个或一个前导字符	grep -E bo? 匹配b,bo|	或	grep -E a|b()	组字符 看成整体 grep -E (my|your)self 匹配myself或yourself{n}	前导字符重复n次{n,}	前导字符重复至少n次{n,m}	前导字符重复n到m次

第二类正则

[:alnum:]	字母与数字字符		[[:alunm:]]+[:alpha:]	字符字符(包括大小写)		[[:alpha:]]{4}[:blank:]	空格与制表符	[[:blank:]]*[:digit:]	数字		[[:digit:]]?[:lower:]	小写字母		[[:lower:]]{4,}[:upper:]	大写字母		[[:upper:]]+  [A-Z][:punct:]	标点符号		[[:punct:]][:space:]	包括换行符,回车在内的所有空白		[[:space:]]+grep -E [[:alunm:]]+

正则表达式总结

  • 1.我要找什么
找数字	[0-9]找字母	[a-zA-Z]找标点符号	[[:punct:]]
  • 2.我要如何找
以什么为首		^key以什么为结尾		key$包含什么或者不包含什么		[abc] ^[abc][^abc]^[^abc]
  • 3.我要找多少
找前导字符出现0次或连续多次		ab*找任意单个字符		ab.找任意字符		ab.*找前导字符连续出现几次		{n} {n,} {n,m}找前导字符出现1次或者多次	 go+
1.1.1.1[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}([0-9]{1,3}\\.){3}[0-9]{1,3}\\d+\\.\\d+\\.\\d+\\.\\d+(\\d+\\.){3}\\d+

案例

1.查找不以大写字母开头的行grep \'^[^A-Z]\'grep -v \'^[A-Z]\'grep \'^[^[:upper:]]\'2.查找所有数字的行grep [0-9]grep -P \'\\d\'3.查找一个数字和在一个字母连起来grep -E \'[0-9][a-zA-Z]|[a-zA-Z][0-9]\'4.查找不以r开头的行grep -v \'^r\'5.查找以数字开头的行grep \'^[0-9]\'6.查找以大写字母开头的grep \'^[A-Z]\'7.查找以小写字母开头的grep \'^[a-z]\'8.查找以点结束的grep \'\\.$\'9.去掉空行grep -v \'^$\'10.查找完全匹配abc的行grep \'\\<abc\\>\'grep -w \'abc\'11.查找A后面有3个数字的行grep \'A[0-9]{3}\'12.统计root在/etc/passwd出现几次 -o 只显示匹配项grep -o \'root\' /etc/passwd | wc -l13.用正则找出自己的ip地址 广播地址 子网掩码ifconfig|grep -oE \'([0-9]{1,3}\\.){3}[0-9]{1,3}\'14.找出文件中的ip地址并且打印替换为172.16.2.254grep -o -E \'([0-9]{1,3}\\.){3}[0-9]{1,3}\' 1.txt | sed -n \'s/192.168.0.\\(254\\)/172.16.2.\\1/p\'15.找出文件中的ip地址grep -oE \'([0-9]{1,3}\\.){3}[0-9]{1,3}\' 1.txt16.找出全部是数字的行grep -E \'^[0-9]+$\'17.找出邮箱地址grep -E \'^[0-9a-zA-Z]+@[a-z0-9]+\\.[a-z]+$\'
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 12.Shell之正则表达式+总结+案例