grep ‘c*’ /etc/passwd
grep ‘c\+’ /etc/passwd
egrep ‘c+’ /etc/passwd
在vim下面用 :%s/xxx/aaa/ 可将所有字符串xxx替换为aaa
/^$/找的是空行,包括回车
最好用egrep而且搜索的正则表达式要加双引号或单引号,最好是双引号
1、正则表达式元字符
基本正则表达式原字符
元字符 | 功能 | 示例 | 说明 |
---|---|---|---|
^ | 行首定位符 | ^love | 以l开头且后面跟ove的行 |
$ | 行尾定位符 | love$ | |
. | 匹配单个字符 | l…e | 匹配l和e之间有两个任意字符的字符串 |
* | 匹配前导符0到多次 | ab*love | 匹配如alove,ablove,abbbbblove |
.* | 任意多个字符 | ||
[] | 匹配指定范围内的一个字符 | [lL]ove | 匹配love或Love |
[ - ] | 匹配指定范围内的一个字符 | [a-z0-9]ove | 小写a-z和0-9中任意一个在加ove |
[^] | 匹配不在指定组内的字符 | [^a-z0-9]ove | |
\ | 用来转义元字符 | love\. | 这里把.转义为了原始的标点符号 |
\< | 词首定位符 | \<love | |
\> | 词尾定位符 | love\> | |
\(..\) | 匹配稍后使用的字符的标签 | :% s/172.16.130.1/172.16.130.5/ 可简化为 :% s/\ (172.16.130.\) 1/\1 5/也可写成: % s/\(172.\)\(16.\)\(130.\)1/\1\2\35/ | 将文本内容172.16.130.1转化为172.16.130.5 第二个的\1相当于第一个括号里的内容 |
x\{m\} | 字符x重复出现m次 | o\{5\} | |
x\{m,\} | 字符x重复出现m次以上 | o\{5,\} | |
x\{m,n\} | 字符x重复出现m到n次 | o\{5,10\} |
扩展正则表达式元字符这里应该是一定要用egrep的
元字符 | 功能 | 示例 | 说明 |
---|---|---|---|
+ | 匹配一个或多个前导字符 | [a+z]+ove | a-z中至少匹配一个 |
? | 匹配一个或0个前导字符 | lo? ve | |
a|b | 匹配a或b | love|hate | |
() | 组字符 | love(able|rs)ov+ ov+ (ov)+ | ov+是v重复一个或多个(ov)+是重复ov一个或多个ovovovo… |
(..)(..)\1\2 | 标签匹配字符 | (love)able\1er | \1相当于love |
x{m} | 字符x重复m次 | o{5} | |
x{m,} | 字符x重复至少m次 | o{5,} | |
x{m,n} | 字符x重复m到n次 | o{5,10} |
POSIX字符类
元字符 | 功能 | 示例 | 说明 |
---|---|---|---|
[:alnum:] | 字母与数字字符 | [[:alnum]]+ | 实例是匹配一个或多个字母或数字的 |
[:alpha:] | 字母字符(包括大小写字母) | [[:alpha] ]{4} | |
[:blank:] | 空格与制表符 | [[:blank:]]{4} | |
[:digit:] | 数字字母 | [[:digit:]]? | |
[:lower:] | 小写字母 | [[:lower:]]{5,} | |
[:upper:] | 大写字母 | [[:upper:]]+ | |
[:punct:] | 标点符号 | [[:punct:]] | |
[:space:] | 包括换行符,回车等在内的所有空白 | [[:space:]]+ |
正则表达式示例 在vim里用esc :
/love/
/^love/
/love$/
/l.ve/
/lo*ve/
/[Ll]ove/
/love[a-z]
/love[^a-zA-Z0-9]/
/.*/
/^$/
/^[A-Z]..$/
/^[A-Z][a-z]*3[0-5]/
/[a-z]*\./
/^ *[A-Z][a-z][a-z]$/注意这是匹配开头有或者没有空格的
/^[A-Za-z]*[^,][A-Za-z]*$/
/\<fourth\>/
/\<f.*th\>/
/5{2}2{3}\./
空行
/^$/
/^[\t]*$/
注释行
/^#/
/^[\t]*#/
grep
grep
egrep
fgrep
grep选项
选项 | 完整选项 | 意义 | 例子 |
---|---|---|---|
-i | - -ignore-case | 忽略大小写 | |
-l | - -files-with-matches | 只列出匹配行所在的文件名 | |
-n | - -line-number | 在每一行前面加上它在文件中的相对行号 | |
-c | - -count | 显示成功匹配的行数 | |
-s | –no-message | 禁止显示文件不存在或者文件不可读的错误信息 | |
-q | - -quiet,- -silent | 静默,会打印出命令返回值 | |
-v | - -invert-match | 反向查找,只显示不匹配的行 | |
-R,-r | - -recursive | 递归查找针对目录 | grep -R ‘aa’ /file 目录 egrep ‘aa’ /file/*递归查找文件 |
- -color | 颜色 | ||
-o | - -only-matching | 只显示匹配的内容(默认情况也就是选项为空的情况是显示匹配的行的所有内容的) | |
-B | - -before-context=NUM | print NUM lines of leading context | -B2显示所在行前面两行 |
-A | - -after-context=NUM | print NUM lines of trailing context | -A2显示所在行后面两行 |
-C | - -context=NUM | print NUM lines of output context | -C2 显示所在行前后两行 |
命令格式
grep [选项] PATTERN filename1 filename2。。其中PATTERN 表示正则表达式的模式(就是正则表达式)filename是要对PATTERN 进行查找的文件
可用man grep查看使用文档或者grep help
grep -E相当于egrep
grep '-v’这样的话系统会把-v看成是选项而不是模式应该这样grep ‘-v’
ps:
元字符 | 作用或等价于 | |
---|---|---|
\w | (word)所有字母与数字,相当于字符[a-zA-Z0-9] | ‘l[a-zA-Z0-9]*ve’ 等价于 ‘\w*ve’ |
\W | 所有字母与数字之外的字符,称为非字符 | 'love[^a-zA-Z0-9]+‘等价于’love\W+’ |
\b | 词边界 | ‘<love>‘等价于’\blove\b’ |