正则表达式
基本正则表达式元字符
^ 行首定位符
$ 行尾定位符
. 匹配任意单个字符 (单个)
*匹配前导符0到多次 *和左侧的字符配合 左侧字符可以出现0次到多次
例如:grep "abc*" /tmp/123 结果显示的是ab abc abcd……
.* 任意多字符 #会出现所有的内容
[] 匹配制定范围内的一个字符
[-] 匹配制定范围内的字符,连续的范围 比如:grep "[0-9]" 文件
[^] 匹配不在指定组内的字符 取反 比如:[ ^A ]bc 排除A的内容
('' "" \ ) 都是转义符 转的是右侧的字符
\ < 词首定位符 #中间没有空格
\ > 词尾定位符 #中间没有空格
() vim 编辑器 5,10s/\(.*\)/#\1 5到10行加注释 #在首行加字符
x\ {m\} 字符x重复出现m次 比如: grep "o\{3\}" 1.txt o字符重复出现3次的
x\ {m,\} 字符x重复出现m次以上 比如: grep "o\{3,\}" 1.txt o字符出现3次以及3次以上的
x{m,n\} 字符x重复出现m到n次 比如:grep "o\{3,5\}" 1.txt o字符出现3到5次的
扩展正则表达式元字符
+匹配1~n次前导符 #至少出现1次 * 比 + 多一次
?匹配0~1次前导符
| a|b匹配a或b
() 组字符
实例
/^$/ 空行
/^字符$/ 查看一个字符
/^[A-Z] [a-z]*3[0-5]/ 一个大写开头,0到多个小写或空格,3,最后是0-5的一个数字
/^[A-Z] [a-z ]*3[0-5]/ 0到多个小写字母,最后一个点
/^ *[A-Z] [a-z] [a-z]$/ 0到多个空格开头,一个大写,一个小写,再一个小写结尾
/^[A-Za-z]* [ ^, ] [A-Za-z] *$/ 0到多个字母开头,非逗号,0到多个英文结尾
/^[ \t]*$/ 0到多个 ,空格或tab的行
/^[ \t]*#/ 有0到多个,空格或者tab开头的行,的注释行
:1,$ s/([Oo]ccur)ence/\1rence/ 多个r # occurence occurrence 部分替换
:1,$ s/(square) and (fair)/\2 and \1/ 换个位置
grep
egrep 支持扩展正则
\w 所有字母与数字,称为字符[a-zA-Z0-9] 'l[a-zA-Z0-9]*ve' === 'l\w *ve' \W 所有字母与数字之外的字符,称为非字符 'love[ ^a-zA-Z0-9]+' === 'love\W+' \b 词边界 # \b === \ <或者 \ > 词首定位符 词尾定位符 '<love>' === '\blove\b'
fgrep不支持扩展正则
grep -v 取反
grep -q 静默 #需要在后面加上一个返回值
grep -R 可以查看目录下的文件
grep -o 只找到这个关键字就可以
grep -B2 前两行 关键字符的前两行
grep -A2 后两行 关键字符的后两行
grep -C2 上下两行 关键字符的上下各两行
egrep -n 带行号
egrep -l 只显示文件名
egrep TB Savage datefile.txt #找TB,在savage里找,在datafile里找 一个关键字符可以再多个文件中查找
sed
sed 流编辑
逐行分析文件中的内容
格式
sed 选项 命令 文件 #{选项}正则表达式
sed 选项 -f 脚本 文件 #基本不用
只有出现语法错误的时候才返非0
d 删除 sed -r '/root/d' passwd#删除passwd文件root行的信息
s 替换命令 sed -r 's/root/dufeng/g' passwd #替换passwd文件中root替换成dufeng ### g全局替换
sed -r 's/[0-9] [0-9]$/&.5/' passwd #替换passwd文件中以两位数字结尾的字符替换成字符加上.5
r读文件命