grep三大家族:grep egrep fgrep
一、基本用法
grep [options] PATTERN [FILE...]
-i ignore case
--color
-v reverse
-o only print match string
-c 计算找到行的数目
-w 只匹配单词
-q 安静模式,不输出任何信息,即使是检测到错误,而是立即返回状态0(如果匹配到的话)
TIP: alias grep='grep --color'
二、正则表达式
RegExp: regular expression 正则表达式
^ 表示一行的开头。如:/^#/ 以#开头的匹配。
$ 表示一行的结尾。如:/}$/ 以}结尾的匹配。
\< 表示词首。 如 \<abc 表示以 abc 为首的詞。
\> 表示词尾。 如 abc\> 表示以 abc 結尾的詞。
. 表示任何单个字符。
* 表示某个字符出现了0次或多次。
[ ] 字符集合。 如:[abc]表示匹配a或b或c,还有[a-zA-Z]表示匹配所有的26个字符。如果其中有^表示反,如[^a]表示非a的字符
1 元字符:metacharacter:
. 匹配任意单个字符
[] 匹配指定范围的任意单个字符
[^] 匹配指定范围外的任意单个字符
字符集合 : [:digit:] [:lower:] [:upper:] [:punct:] [:space:] [:alpha:] [:alnum:]
注:引用时要用[]
2 匹配次数(贪婪模式):
* 匹配其前面的字符任意次
\? 匹配前面字符一次或零次
\{m,n\} 匹配前面字符至少m次,至多n次
3 位置锚定
^ 锚定行首
$ 锚定行尾
^$ 锚定空行
\< 或 \b 其后面的任意字符必须作为单词首部出现
\> 或 \b 其后面的任意字符必须作为单词尾部出现
4 分组
\(\)
\(ab\)* ab出现零次或多次
后向引用
\1 引用第一个左括号以及与之对应的右括号所包括的所有内容
\2 。。。。。
\3 。。。。。
5 上下文控制 Context control:
-B, --before-context=NUM print NUM lines of leading context
-A, --after-context=NUM print NUM lines of trailing context
-C, --context=NUM print NUM lines of output context
-------------------------------------------------------------------------------------------------------------
实例1 输出下列文本包含linux行的前后2行
8888
99999
linux
UI
nouu
answer: grep -A2 -B2 'linux'filename 或 grep -C 'linux'filename