shell脚本编程 正则表达式

正则表达式:
通配符: * ? {} ^
*.txt 以.txt结尾
??.txt 一.txt结尾的两个字符的文件
[0-9] [a-z] [A-z] [0-z] [0-9a-z] [1,2]
[^0-9] 和[!0-9] //取反,非数字

		*5?:倒数第二位第五个
		{[abc],*.txt}: 匹配a 和b 和c 和以.txt结尾
		[abc]*.txt:	a或者b或者c开头后边任意以.txt结尾的

基本正则表:
	^	:匹配行首
	$	:匹配行尾
	[]	:集合、匹配集合中任意的单个字符
	[^]	:对集合进行取反
	.	:匹配任意单个字符
	*	:匹配*前一个字符任意次数,*号不能单独使用
	\{n,m\}	:匹配前一个字符n到m次
	\{n\}	:匹配前一个字符n次
	\{n,\}	:匹配前一个字符n次以上
	\(\)	:保留

扩展正则表:
	+ 	:最少匹配一次 1-∞ 
	?	:最多匹配一次 0-1 包含没有的情况
	{n,m}	:匹配n到m次
	()	:组合为整体,保留
	|	:或者
	\b	:单词边界

grep查询匹配的行:
egrep检索文本行:

测试文件: /etc/passwd
1.输出以“r”开头的行:
# grep ‘^r’ /etc/passwd

2.输出以nologin结尾的行:
# grep ‘/bin/bash’ /etc/passwd

3.组合多个条件,查找一root开头的行或者以xieqc开头的行
# egrep ‘root|xieqc’ /etc/passwd
# grep -E ‘root|xieqc’ /etc/passwd
# grep ‘root|xieqc’ /etc/passwd

grep中的选项:
-q :表示静默,只检索不输出
-c :可输出匹配到的行数

4.输出/etc/passwd中非空行
# egrep ‘.’ /etc/passwd
# grep -v‘^$’ /etc/passwd

测试文件:/etc/rc.local
5.输出包括f、ff、fff、…的行,输出f至少出现一次 /etc/rc.local
# egrep ‘f+’ /etc/rc.local

6.输出包含init、initial的行 ?
输出包含ab、abc、abd、abr、aby、abi的行
# egrep init{ial}? /etc/ec.local

7.输出包含stu、stuf、stuff、…的行
# egrep stuf* /etc/rc.local

8.输出所有行 .* 包含空行

9.输出以r开头,并且以nologin结尾的行,中间可以是任意字符
# egrep ‘^r.*nologin$’ /etc/passwd

10.输出abababab ab连续出现了四次 ‘(ab){4}’

11.输出abc、abd: ‘ab[cd]’

12.输出包括以hh结尾的单词的行 ‘hh\b’或者 ‘hh>’ ‘\hh>’‘\hh\b’
niha ma asdhh aha wohenhao

匹配MAC地址:
以冒号分隔一共6位,是一个16进制的数: 00:50:C0:C5:R2:C5 [0-9a-fA-F]{2}
‘[0-9a-fA-F]{2}[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:’

#!/bin/bash

fine=“/root/regexptest.txt”

egrep ‘the’ $fine #包含the
egrep -v ‘the’ $fine #没有the
egrep -i ‘the’ $fine #the无论大小写
egrep ‘test|taste’ $fine # test或者taste
egrep ‘oo’ $fine #有oo
egrep ‘[^g]oo’ $fine #oo前面没有g
egrep ‘[^a-z]oo’ $fine #oo前面没有小写字母
egrep ‘[0-9]’ $fine #有数字
egrep ‘^the’ $fine #the开头
egrep ‘1’ $fine #小写字母开头
egrep ‘[a-Z]’ $fine #不是字母开头
egrep -v ‘.’ $fine #空行
egrep ‘g.{2}d’ $fine #g??d
egrep ‘o{2,}’ KaTeX parse error: Expected 'EOF', got '#' at position 17: …ine #̲两个o以上 egrep ‘^…’ $fine #g后面至少一个o最后gg结尾
egrep ‘[0-9]’ $fine #任意数字
egrep ‘oo’ $fine #包含oo
egrep ‘go{2,5}g’ $fine #g后面2到五个o后面再跟个g
egrep ‘go{2,}’ $fine #g后面两个o以上


  1. a-z ↩︎

你可能感兴趣的:(shell脚本编程 正则表达式)