跳至内容
wiki
用户工具
登录
站点工具
搜索
工具
显示页面
修订记录
导出 PDF
反向链接
最近更改
媒体管理器
网站地图
登录
>
最近更改
媒体管理器
网站地图
您在这里:
start
»
linux
»
正则表达式
您的足迹:
linux:正则表达式
本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。
====== - 正则表达式 ====== 参考book: The Linux Command Line 这里主要是指POSIX Basic Vs. Extended Regular Expressions,不是指perl用的那一套正则表达式。 POSIX basic 正则表达式一般叫做BRE, -- grep使用的。 POSIX Basic Vs. Extended Regular Expressions叫做ERE, -- egrep使用的, grep -E也是一样。 ===== - BRE ===== ERE和BRE都支持以下符号: ^ $ . [ ] * 上面这几个符号默认当特殊功能符号,如果需要匹配这些符号,需要在前面加\转义。 ==== - 正常匹配 ==== <code bash> $ echo "haha [i889" | grep "\[i" # 使用\[来匹配[符号 haha [i889 $ echo "haha [i889^" | grep "\^" # 匹配^字符 haha [i889^ $ echo "haha [i889" | grep "\[i8*" # 匹配到两个8 haha [i889 $ echo "hahai" | grep "\(ha\)i" # 使用括号的时候需要在前面加一个\, hahai $ echo "hahai" | grep "\(ha\)\+i" # 使用+的时候也要在前面加一个\ hahai $ echo "(hahai" | grep "(ha" (hahai ## ERE和BRE不支持\d类似表达数字的用法,一般建议直接使用[0-9]的方式实现匹配数字,用[a-zA-Z]匹配字母 # 匹配数字 $ echo "hahai89" | grep "hai[0-9]" hahai89 $ echo "hahai89" | grep "hai[0-9]\+" hahai89 $ echo "haha i889" | grep "8*" haha i889 # 匹配字符 $ echo "haha i89" | grep "[a-zA-Z]\+ i89" haha i89 # 匹配边界,使用\<和\> $ echo "haha i89" | grep "\<i89\>" haha i89 </code> ==== - 匹配非 ==== <code bash> $ echo "haha [i8899" | grep "[^89]" # 匹配除8和9之外的所有字符 haha [i8899 像这种情况下,匹配到的是haha [i, 当前行还是被匹配到的。如果不想匹配带89的行,需要在grep的参数加上-v选项。 </code> ==== - grep选中不匹配的行 ==== grep -v选项的解释 <code> -v, --invert-match Invert the sense of matching, to select non-matching lines. (-v is specified by POSIX.) </code> <code bash> $ echo "haha [i8899" | grep -v "89" # echo中带有89, grep使用了-v参数,所以该行不会被匹配到。 </code> ===== - ERE增强 ===== ERE支持BRE的所有规则,另外ERE比BRE多添加了对以下符号的支持: ( ) { } ? + | 注意:ERE多的这几个符号默认是当做特殊功能字符,如要其要被当前普通字符被匹配,需要在其前面加\进行转义。 <code bash> $ echo "haha [i889" | grep -E "(88)" # 匹配88, ()只起限定范围的使用 haha [i889 $ echo "haha [i889" | grep -E "89\>" # 匹配边界 haha [i889 $ echo "haha [i889" | grep -E "8+" # 匹配到两个8 haha [i889 $ echo "haha [i8899" | grep -E "88|99" # 匹配88或者99 haha [i8899 $ echo "haha) [i889" | grep -E "haha\)" # 匹配)符号 haha) [i889 </code> <code> {n} Match the preceding element if it occurs exactly n times. {n,m} Match the preceding element if it occurs at least n times, but no more than m times. {n,} Match the preceding element if it occurs n or more times. {,m} Match the preceding element if it occurs no more than m times. </code> ===== - sed命令 ===== <code bash> sed 's/regexp/replacement/' distros.txt # regexp expand方式的匹配,可以理解为ERE sed -r 's/(regexp)/new_\1' distros.txt # 和上面效果一样,是普通的regexp, 可以理解为BRE sed 's/\(regexp\)/new_\1/' distros.txt # -i, 将替换后的结果写回原文件中 sed -i 's/\(regexp\)/new_\1/' distros.txt </code>
linux/正则表达式.txt
· 最后更改: 2023/05/19 14:46 由
zhangguo
页面工具
显示页面
修订记录
反向链接
导出 PDF
回到顶部