元字符简单说明
. 英文句号,实心点 作用 :代表任意一个字符(换行符除外)
[] 方括号 将匹配方括号的任意一个字符。
* 代表多个或0个其他字符
[^char] 不配 ^ 后的任何字符,此处为不匹配 c h a r
^char 行首匹配,仅当char出现在行首时进行匹配
^char[char] 对行首的 charc 、charh、 chara、 charr 进行匹配
$ 只匹配在行尾出现的实例 ,如 s$ 只匹配以s结尾的行
\ 反斜杠,转义符,把元字符还原为普通字符 ,如 \? 则只会匹配 ?
? 代表零个或一个或多个字符 (不通用)
[a-z] a 到z 的任意一个字符 类似的有[A-Z] 和[0-9] 亦可以混合使用 如 [b-k 6-8] 代表 b到k或者6 到8的任意一个字符
grep 功能说明:查找文件里符合条件的字符串。
普通的grep支持 regular expression
egrep 为grep 的加强版,支持更多的正则表达式,支持extended regular expression
而grep -E 和 egrep 一样
语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示行数>][-C<显示行数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
grep 中若范本样式串不是正则表达式可以不用单引号 如 匹配 test中的 ok 则可用 grep ok test 或者 grep 'ok' test (test文件在当前的目录下)
而 grep c[abc] t test 则建议写成 grep 'c[abc]' test
补充说明:grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一行显示出来。若不指定任何文件名称,或是所给予的文件名为“-”,则grep指令会从标准输入设备读取数据。
参 数:
-a或--text 不要忽略二进制的数据。
-A<显示行数>或--after-context=<显示行数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
-b或--byte-offset 在显示符合范本样式的那一行之前,标示出该行第一个字符的位编号。
-B<显示行数>或--before-context=<显示行数> 除了显示符合范本样式的那一行之外,并显示该行之前的内容。
-c或--count 计算符合范本样式的行数。
-C<显示行数>或--context=<显示行数>或-<显示行数> 除了显示符合范本样式的那一行之外,并显示该行之前后的内容。
-d<进行动作>或--directories=<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-e<范本样式>或--regexp=<范本样式> 指定字符串做为查找文件内容的范本样式。
-E或--extended-regexp 将范本样式为延伸的普通表示法来使用。
-f<范本文件>或--file=<范本文件> 指定范本文件,其内容含有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每行一个范本样式。
-F或--fixed-regexp 将范本样式视为固定字符串的列表。
-G或--basic-regexp 将范本样式视为普通的表示法来使用。
-h或--no-filename 不显示该行所在的文件名
-H或--with-filename 同时显示出匹配行所在的文件的文件名
不区分大小写
即显示匹配的文件名
显示不匹配的文件名
显示匹配行的行编号号
-q或--quiet或--silent 不显示任何信息。
-r或--recursive 此参数的效果和指定“-d recurse”参数相同。
-s或--no-messages 不显示错误信息。
-v或--revert-match 反转查找,显示不配的行。
-V或--version 显示版本信息。
-w或--word-regexp 只显示全字符合的行。
-x或--line-regexp 只显示全行符合的行。
-y 此参数的效果和指定“-i”参数相同。
--help 在线帮助。
实例应用
例子1: test 文本中有 student 和 students的多行子串 , 要求只显示 包含student 的行
grep -v students test | grep -e student
或者 grep -w student test
说明 先将 test 文件中包含students的行全部去掉 -v 选项就是不包含匹配项的选项 然后使用管道将得到的内容再进行一次匹配找出包含student的行
例子2:匹配test 中有[] 的行
grep -e \\[\\] test 或者 grep '\[\]' test
类似的:
grep -e \\* 只匹配* 同上
grep -e \\^ 只匹配^ 同上
grep -e \\# 只匹配 # 同上
例子3 搜索当前目录中所有文件内容中包含 ok 的行,并显示该行所在的文件名及行号
grep ok -n -H ./* 或 grep ok -n -H * 其中 * 表示任意文件名(不能匹配隐藏的文件名如 .test即不能匹配)
例子4 查找test文本中以 a或者 #结尾的行
egrep '(a|\#)$' test