|
|
@ -1,359 +1,359 @@
|
|
|
|
grep
|
|
|
|
# grep
|
|
|
|
===
|
|
|
|
|
|
|
|
|
|
|
|
强大的文本搜索工具
|
|
|
|
强大的文本搜索工具
|
|
|
|
|
|
|
|
|
|
|
|
## 说明
|
|
|
|
## 补充说明
|
|
|
|
|
|
|
|
|
|
|
|
**grep** (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。
|
|
|
|
**grep** (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。
|
|
|
|
|
|
|
|
|
|
|
|
grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。
|
|
|
|
grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。
|
|
|
|
|
|
|
|
|
|
|
|
grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。
|
|
|
|
grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。
|
|
|
|
|
|
|
|
### 选项
|
|
|
|
## 选项
|
|
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
```sh
|
|
|
|
用法: grep [选项]... PATTERN [FILE]...
|
|
|
|
用法: grep [选项]... PATTERN [FILE]...
|
|
|
|
在每个 FILE 或是标准输入中查找 PATTERN。
|
|
|
|
在每个 FILE 或是标准输入中查找 PATTERN。
|
|
|
|
默认的 PATTERN 是一个基本正则表达式(缩写为 BRE)。
|
|
|
|
默认的 PATTERN 是一个基本正则表达式(缩写为 BRE)。
|
|
|
|
例如: grep -i 'hello world' menu.h main.c
|
|
|
|
例如: grep -i 'hello world' menu.h main.c
|
|
|
|
|
|
|
|
|
|
|
|
正则表达式选择与解释:
|
|
|
|
正则表达式选择与解释:
|
|
|
|
-E, --extended-regexp PATTERN 是一个可扩展的正则表达式(缩写为 ERE)
|
|
|
|
-E, --extended-regexp PATTERN 是一个可扩展的正则表达式(缩写为 ERE)
|
|
|
|
-F, --fixed-strings PATTERN 是一组由断行符分隔的定长字符串。
|
|
|
|
-F, --fixed-strings PATTERN 是一组由断行符分隔的定长字符串。
|
|
|
|
-G, --basic-regexp PATTERN 是一个基本正则表达式(缩写为 BRE)
|
|
|
|
-G, --basic-regexp PATTERN 是一个基本正则表达式(缩写为 BRE)
|
|
|
|
-P, --perl-regexp PATTERN 是一个 Perl 正则表达式
|
|
|
|
-P, --perl-regexp PATTERN 是一个 Perl 正则表达式
|
|
|
|
-e, --regexp=PATTERN 用 PATTERN 来进行匹配操作
|
|
|
|
-e, --regexp=PATTERN 用 PATTERN 来进行匹配操作
|
|
|
|
-f, --file=FILE 从 FILE 中取得 PATTERN
|
|
|
|
-f, --file=FILE 从 FILE 中取得 PATTERN
|
|
|
|
-i, --ignore-case 忽略大小写
|
|
|
|
-i, --ignore-case 忽略大小写
|
|
|
|
-w, --word-regexp 强制 PATTERN 仅完全匹配字词
|
|
|
|
-w, --word-regexp 强制 PATTERN 仅完全匹配字词
|
|
|
|
-x, --line-regexp 强制 PATTERN 仅完全匹配一行
|
|
|
|
-x, --line-regexp 强制 PATTERN 仅完全匹配一行
|
|
|
|
-z, --null-data 一个 0 字节的数据行,但不是空行
|
|
|
|
-z, --null-data 一个 0 字节的数据行,但不是空行
|
|
|
|
|
|
|
|
|
|
|
|
杂项:
|
|
|
|
杂项:
|
|
|
|
-s, --no-messages 抑制错误消息
|
|
|
|
-s, --no-messages 抑制错误消息
|
|
|
|
-v, --invert-match 查看没有被匹配的行
|
|
|
|
-v, --invert-match 查看没有被匹配的行
|
|
|
|
-V, --version display version information and exit
|
|
|
|
-V, --version display version information and exit
|
|
|
|
--help display this help text and exit
|
|
|
|
--help display this help text and exit
|
|
|
|
|
|
|
|
|
|
|
|
输出控制:
|
|
|
|
输出控制:
|
|
|
|
-m, --max-count=NUM NUM 次匹配后停止
|
|
|
|
-m, --max-count=NUM NUM 次匹配后停止
|
|
|
|
-b, --byte-offset 输出的同时打印字节偏移
|
|
|
|
-b, --byte-offset 输出的同时打印字节偏移
|
|
|
|
-n, --line-number 输出匹配字符的同时打印行号
|
|
|
|
-n, --line-number 输出匹配字符的同时打印行号
|
|
|
|
--line-buffered 每行输出清空
|
|
|
|
--line-buffered 每行输出清空
|
|
|
|
-H, --with-filename 为每一匹配项打印文件名
|
|
|
|
-H, --with-filename 为每一匹配项打印文件名
|
|
|
|
-h, --no-filename 输出时不显示文件名前缀
|
|
|
|
-h, --no-filename 输出时不显示文件名前缀
|
|
|
|
--label=LABEL 将LABEL 作为标准输入文件名前缀
|
|
|
|
--label=LABEL 将LABEL 作为标准输入文件名前缀
|
|
|
|
-o, --only-matching 仅打印匹配行的匹配(非空白)部分,每个这样的部分位于单独的输出行中。
|
|
|
|
-o, --only-matching 仅打印匹配行的匹配(非空白)部分,每个这样的部分位于单独的输出行中。
|
|
|
|
-q, --quiet, --silent suppress all normal output,不要向标准输出写任何东西
|
|
|
|
-q, --quiet, --silent suppress all normal output,不要向标准输出写任何东西
|
|
|
|
--binary-files=TYPE assume that binary files are TYPE;
|
|
|
|
--binary-files=TYPE assume that binary files are TYPE;
|
|
|
|
TYPE is 'binary', 'text', or 'without-match'
|
|
|
|
TYPE is 'binary', 'text', or 'without-match'
|
|
|
|
-a, --text equivalent to --binary-files=text
|
|
|
|
-a, --text equivalent to --binary-files=text
|
|
|
|
-I equivalent to --binary-files=without-match
|
|
|
|
-I equivalent to --binary-files=without-match
|
|
|
|
-d, --directories=ACTION how to handle directories;
|
|
|
|
-d, --directories=ACTION how to handle directories;
|
|
|
|
ACTION is 'read', 'recurse', or 'skip'
|
|
|
|
ACTION is 'read', 'recurse', or 'skip'
|
|
|
|
-D, --devices=ACTION how to handle devices, FIFOs and sockets;
|
|
|
|
-D, --devices=ACTION how to handle devices, FIFOs and sockets;
|
|
|
|
ACTION is 'read' or 'skip'
|
|
|
|
ACTION is 'read' or 'skip'
|
|
|
|
如果输入文件是设备,FIFO或套接字,则使用操作来处理它。默认情况下,操作是'读',这意味着设备的读取就像是普通文件一样。如果行动是'跳跃',设备,FIFO和套接字默默跳过。
|
|
|
|
如果输入文件是设备,FIFO或套接字,则使用操作来处理它。默认情况下,操作是'读',这意味着设备的读取就像是普通文件一样。如果行动是'跳跃',设备,FIFO和套接字默默跳过。
|
|
|
|
-r, --recursive like --directories=recurse 递归搜索,包括子目录下的文件
|
|
|
|
-r, --recursive like --directories=recurse 递归搜索,包括子目录下的文件
|
|
|
|
-R, --dereference-recursive
|
|
|
|
-R, --dereference-recursive
|
|
|
|
likewise, but follow all symlinks
|
|
|
|
likewise, but follow all symlinks
|
|
|
|
--include=FILE_PATTERN
|
|
|
|
--include=FILE_PATTERN
|
|
|
|
search only files that match FILE_PATTERN
|
|
|
|
search only files that match FILE_PATTERN
|
|
|
|
--exclude=FILE_PATTERN
|
|
|
|
--exclude=FILE_PATTERN
|
|
|
|
skip files and directories matching FILE_PATTERN
|
|
|
|
skip files and directories matching FILE_PATTERN
|
|
|
|
--exclude-from=FILE skip files matching any file pattern from FILE
|
|
|
|
--exclude-from=FILE skip files matching any file pattern from FILE
|
|
|
|
--exclude-dir=PATTERN directories that match PATTERN will be skipped.
|
|
|
|
--exclude-dir=PATTERN directories that match PATTERN will be skipped.
|
|
|
|
-L, --files-without-match print only names of FILEs containing no match
|
|
|
|
-L, --files-without-match print only names of FILEs containing no match
|
|
|
|
-l, --files-with-matches 只打印包含匹配的文件的名称
|
|
|
|
-l, --files-with-matches 只打印包含匹配的文件的名称
|
|
|
|
-c, --count 只打印每个文件匹配字符串行的数量
|
|
|
|
-c, --count 只打印每个文件匹配字符串行的数量
|
|
|
|
-T, --initial-tab make tabs line up (if needed)
|
|
|
|
-T, --initial-tab make tabs line up (if needed)
|
|
|
|
-Z, --null print 0 byte after FILE name
|
|
|
|
-Z, --null print 0 byte after FILE name
|
|
|
|
|
|
|
|
|
|
|
|
文件控制:
|
|
|
|
文件控制:
|
|
|
|
-B, --before-context=NUM 打印以文本起始的NUM 行
|
|
|
|
-B, --before-context=NUM 打印以文本起始的NUM 行
|
|
|
|
-A, --after-context=NUM 打印以文本结尾的NUM 行
|
|
|
|
-A, --after-context=NUM 打印以文本结尾的NUM 行
|
|
|
|
-C, --context=NUM 打印输出文本NUM 行
|
|
|
|
-C, --context=NUM 打印输出文本NUM 行
|
|
|
|
-NUM same as --context=NUM
|
|
|
|
-NUM same as --context=NUM
|
|
|
|
--group-separator=SEP use SEP as a group separator
|
|
|
|
--group-separator=SEP use SEP as a group separator
|
|
|
|
--no-group-separator use empty string as a group separator
|
|
|
|
--no-group-separator use empty string as a group separator
|
|
|
|
--color[=WHEN],
|
|
|
|
--color[=WHEN],
|
|
|
|
--colour[=WHEN] use markers to highlight the matching strings;
|
|
|
|
--colour[=WHEN] use markers to highlight the matching strings;
|
|
|
|
WHEN is 'always', 'never', or 'auto'
|
|
|
|
WHEN is 'always', 'never', or 'auto'
|
|
|
|
-U, --binary do not strip CR characters at EOL (MSDOS/Windows)
|
|
|
|
-U, --binary do not strip CR characters at EOL (MSDOS/Windows)
|
|
|
|
-u, --unix-byte-offsets report offsets as if CRs were not there
|
|
|
|
-u, --unix-byte-offsets report offsets as if CRs were not there
|
|
|
|
(MSDOS/Windows)
|
|
|
|
(MSDOS/Windows)
|
|
|
|
|
|
|
|
|
|
|
|
‘egrep’即‘grep -E’。‘fgrep’即‘grep -F’。
|
|
|
|
‘egrep’即‘grep -E’。‘fgrep’即‘grep -F’。
|
|
|
|
直接使用‘egrep’或是‘fgrep’均已不可行了。
|
|
|
|
直接使用‘egrep’或是‘fgrep’均已不可行了。
|
|
|
|
egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。
|
|
|
|
egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。
|
|
|
|
若FILE 为 -,将读取标准输入。不带FILE,读取当前目录,除非命令行中指定了-r 选项。
|
|
|
|
若FILE 为 -,将读取标准输入。不带FILE,读取当前目录,除非命令行中指定了-r 选项。
|
|
|
|
如果少于两个FILE 参数,就要默认使用-h 参数。
|
|
|
|
如果少于两个FILE 参数,就要默认使用-h 参数。
|
|
|
|
如果有任意行被匹配,那退出状态为 0,否则为 1;
|
|
|
|
如果有任意行被匹配,那退出状态为 0,否则为 1;
|
|
|
|
如果有错误产生,且未指定 -q 参数,那退出状态为 2。
|
|
|
|
如果有错误产生,且未指定 -q 参数,那退出状态为 2。
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 规则表达式
|
|
|
|
### 规则表达式
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
```bash
|
|
|
|
^ # 锚定行的开始 如:'^grep'匹配所有以grep开头的行。
|
|
|
|
^ # 锚定行的开始 如:'^grep'匹配所有以grep开头的行。
|
|
|
|
$ # 锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
|
|
|
|
$ # 锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
|
|
|
|
\ # 转义符
|
|
|
|
\ # 转义符
|
|
|
|
. # 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
|
|
|
|
. # 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
|
|
|
|
* # 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。
|
|
|
|
* # 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。
|
|
|
|
.* # 一起用代表任意字符。
|
|
|
|
.* # 一起用代表任意字符。
|
|
|
|
[] # 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
|
|
|
|
[] # 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
|
|
|
|
[^] # 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
|
|
|
|
[^] # 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
|
|
|
|
\(..\) # 标记匹配字符,如'\(love\)',love被标记为1。
|
|
|
|
\(..\) # 标记匹配字符,如'\(love\)',love被标记为1。
|
|
|
|
\< # 锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。
|
|
|
|
\< # 锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。
|
|
|
|
\> # 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
|
|
|
|
\> # 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
|
|
|
|
x\{m\} # 重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。
|
|
|
|
x\{m\} # 重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。
|
|
|
|
x\{m,\} # 重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
|
|
|
|
x\{m,\} # 重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
|
|
|
|
x\{m,n\} # 重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。
|
|
|
|
x\{m,n\} # 重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。
|
|
|
|
\w # 匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
|
|
|
|
\w # 匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
|
|
|
|
\W # \w的反置形式,匹配一个或多个非单词字符,如点号句号等。
|
|
|
|
\W # \w的反置形式,匹配一个或多个非单词字符,如点号句号等。
|
|
|
|
\b # 单词锁定符,如: '\bgrep\b'只匹配grep。
|
|
|
|
\b # 单词锁定符,如: '\bgrep\b'只匹配grep。
|
|
|
|
```
|
|
|
|
```
|
|
|
|
## POSIX字符类
|
|
|
|
## POSIX字符类
|
|
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
```sh
|
|
|
|
[:upper:] 表示大写字母[A-Z]
|
|
|
|
[:upper:] 表示大写字母[A-Z]
|
|
|
|
|
|
|
|
|
|
|
|
[:lower:] 表示小写字母[a-z]
|
|
|
|
[:lower:] 表示小写字母[a-z]
|
|
|
|
|
|
|
|
|
|
|
|
[:digit:] 表示阿拉伯数字[0-9]
|
|
|
|
[:digit:] 表示阿拉伯数字[0-9]
|
|
|
|
|
|
|
|
|
|
|
|
[:alnum:] 表示大小写字母和阿拉伯数字[0-9a-zA-Z]
|
|
|
|
[:alnum:] 表示大小写字母和阿拉伯数字[0-9a-zA-Z]
|
|
|
|
|
|
|
|
|
|
|
|
[:space:] 表示空格或tab键
|
|
|
|
[:space:] 表示空格或tab键
|
|
|
|
|
|
|
|
|
|
|
|
[:alpha:] 表示大小写字母[a-zA-Z]
|
|
|
|
[:alpha:] 表示大小写字母[a-zA-Z]
|
|
|
|
|
|
|
|
|
|
|
|
[:cntrl:] 表示Ctrl键
|
|
|
|
[:cntrl:] 表示Ctrl键
|
|
|
|
|
|
|
|
|
|
|
|
[:graph:]或[:print:] 表示ASCII码33-126之间的字符
|
|
|
|
[:graph:]或[:print:] 表示ASCII码33-126之间的字符
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
搜索以大写字母开头的行
|
|
|
|
搜索以大写字母开头的行
|
|
|
|
|
|
|
|
|
|
|
|
grep ^[[:upper:]] test.txt
|
|
|
|
grep ^[[:upper:]] test.txt
|
|
|
|
|
|
|
|
|
|
|
|
POSIX字符类作为模式的用法都类似,使用时注意用方括号将POSIX字符括起来就行了
|
|
|
|
POSIX字符类作为模式的用法都类似,使用时注意用方括号将POSIX字符括起来就行了
|
|
|
|
|
|
|
|
|
|
|
|
精确匹配单词the的行
|
|
|
|
精确匹配单词the的行
|
|
|
|
|
|
|
|
|
|
|
|
grep "\<the\>" test.txt或grep -w the test.txt
|
|
|
|
grep "\<the\>" test.txt或grep -w the test.txt
|
|
|
|
|
|
|
|
|
|
|
|
或|字符,grep需要加上-E选项才能支持使用它
|
|
|
|
或|字符,grep需要加上-E选项才能支持使用它
|
|
|
|
匹配test.txt文件有zh或en的行
|
|
|
|
匹配test.txt文件有zh或en的行
|
|
|
|
|
|
|
|
|
|
|
|
grep -E "zh|en" test.txt
|
|
|
|
grep -E "zh|en" test.txt
|
|
|
|
|
|
|
|
|
|
|
|
grep:标准grep命令,支持基本正则表达式
|
|
|
|
grep:标准grep命令,支持基本正则表达式
|
|
|
|
|
|
|
|
|
|
|
|
egrep:扩展grep命令,支持基本和扩展正则表达式,与grep -E等价
|
|
|
|
egrep:扩展grep命令,支持基本和扩展正则表达式,与grep -E等价
|
|
|
|
|
|
|
|
|
|
|
|
fgrep:快速grep命令,不支持正则表达式,与grep -F等价
|
|
|
|
fgrep:快速grep命令,不支持正则表达式,与grep -F等价
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## grep命令常见用法
|
|
|
|
## grep命令常见用法
|
|
|
|
|
|
|
|
|
|
|
|
递归搜索含有某个关键字的文件目录
|
|
|
|
递归搜索含有某个关键字的文件目录
|
|
|
|
grep -iHR "关键字" ./*
|
|
|
|
grep -iHR "关键字" ./*
|
|
|
|
-i 对要搜索的字符忽略大小写
|
|
|
|
-i 对要搜索的字符忽略大小写
|
|
|
|
-H 同时打印包括搜索字符串的文件名
|
|
|
|
-H 同时打印包括搜索字符串的文件名
|
|
|
|
-R 递归搜索,当指定的搜索路径是一个目录时,加上-R的搜索会执行递归搜索
|
|
|
|
-R 递归搜索,当指定的搜索路径是一个目录时,加上-R的搜索会执行递归搜索
|
|
|
|
|
|
|
|
|
|
|
|
搜所文件test.txt以/字符开始,中间任意四个字符,第六个字符为/的行
|
|
|
|
搜所文件test.txt以/字符开始,中间任意四个字符,第六个字符为/的行
|
|
|
|
|
|
|
|
|
|
|
|
grep ^/..../ test.txt
|
|
|
|
grep ^/..../ test.txt
|
|
|
|
|
|
|
|
|
|
|
|
在文件中搜索一个单词,命令会返回一个包含 **“match_pattern”** 的文本行:
|
|
|
|
在文件中搜索一个单词,命令会返回一个包含 **“match_pattern”** 的文本行:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
grep match_pattern file_name
|
|
|
|
grep match_pattern file_name
|
|
|
|
grep "match_pattern" file_name
|
|
|
|
grep "match_pattern" file_name
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
在多个文件中查找:
|
|
|
|
在多个文件中查找:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
grep "match_pattern" file_1 file_2 file_3 ...
|
|
|
|
grep "match_pattern" file_1 file_2 file_3 ...
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
输出除之外的所有行 **-v** 选项:
|
|
|
|
输出除之外的所有行 **-v** 选项:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
grep -v "match_pattern" file_name
|
|
|
|
grep -v "match_pattern" file_name
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
标记匹配颜色 **--color=auto** 选项:
|
|
|
|
标记匹配颜色 **--color=auto** 选项:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
grep "match_pattern" file_name --color=auto
|
|
|
|
grep "match_pattern" file_name --color=auto
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
使用正则表达式 **-E** 选项:
|
|
|
|
使用正则表达式 **-E** 选项:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
grep -E "[1-9]+"
|
|
|
|
grep -E "[1-9]+"
|
|
|
|
或
|
|
|
|
或
|
|
|
|
egrep "[1-9]+"
|
|
|
|
egrep "[1-9]+"
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
只输出文件中匹配到的部分 **-o** 选项:
|
|
|
|
只输出文件中匹配到的部分 **-o** 选项:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
echo this is a test line. | grep -o -E "[a-z]+\."
|
|
|
|
echo this is a test line. | grep -o -E "[a-z]+\."
|
|
|
|
line.
|
|
|
|
line.
|
|
|
|
|
|
|
|
|
|
|
|
echo this is a test line. | egrep -o "[a-z]+\."
|
|
|
|
echo this is a test line. | egrep -o "[a-z]+\."
|
|
|
|
line.
|
|
|
|
line.
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
统计文件或者文本中包含匹配字符串的行数 **-c** 选项:
|
|
|
|
统计文件或者文本中包含匹配字符串的行数 **-c** 选项:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
grep -c "text" file_name
|
|
|
|
grep -c "text" file_name
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
输出包含匹配字符串的行数 **-n** 选项:
|
|
|
|
输出包含匹配字符串的行数 **-n** 选项:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
grep "text" -n file_name
|
|
|
|
grep "text" -n file_name
|
|
|
|
或
|
|
|
|
或
|
|
|
|
cat file_name | grep "text" -n
|
|
|
|
cat file_name | grep "text" -n
|
|
|
|
|
|
|
|
|
|
|
|
#多个文件
|
|
|
|
#多个文件
|
|
|
|
grep "text" -n file_1 file_2
|
|
|
|
grep "text" -n file_1 file_2
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
打印样式匹配所位于的字符或字节偏移:
|
|
|
|
打印样式匹配所位于的字符或字节偏移:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
echo gun is not unix | grep -b -o "not"
|
|
|
|
echo gun is not unix | grep -b -o "not"
|
|
|
|
7:not
|
|
|
|
7:not
|
|
|
|
|
|
|
|
|
|
|
|
#一行中字符串的字符便宜是从该行的第一个字符开始计算,起始值为0。选项 **-b -o** 一般总是配合使用。
|
|
|
|
#一行中字符串的字符便宜是从该行的第一个字符开始计算,起始值为0。选项 **-b -o** 一般总是配合使用。
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
搜索多个文件并查找匹配文本在哪些文件中:
|
|
|
|
搜索多个文件并查找匹配文本在哪些文件中:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
grep -l "text" file1 file2 file3...
|
|
|
|
grep -l "text" file1 file2 file3...
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### grep递归搜索文件
|
|
|
|
### grep递归搜索文件
|
|
|
|
|
|
|
|
|
|
|
|
在多级目录中对文本进行递归搜索:
|
|
|
|
在多级目录中对文本进行递归搜索:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
grep "text" . -r -n
|
|
|
|
grep "text" . -r -n
|
|
|
|
# .表示当前目录。
|
|
|
|
# .表示当前目录。
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
忽略匹配样式中的字符大小写:
|
|
|
|
忽略匹配样式中的字符大小写:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
echo "hello world" | grep -i "HELLO"
|
|
|
|
echo "hello world" | grep -i "HELLO"
|
|
|
|
hello
|
|
|
|
hello
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
选项 **-e** 制动多个匹配样式:
|
|
|
|
选项 **-e** 制动多个匹配样式:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
echo this is a text line | grep -e "is" -e "line" -o
|
|
|
|
echo this is a text line | grep -e "is" -e "line" -o
|
|
|
|
is
|
|
|
|
is
|
|
|
|
line
|
|
|
|
line
|
|
|
|
|
|
|
|
|
|
|
|
#也可以使用 **-f** 选项来匹配多个样式,在样式文件中逐行写出需要匹配的字符。
|
|
|
|
#也可以使用 **-f** 选项来匹配多个样式,在样式文件中逐行写出需要匹配的字符。
|
|
|
|
cat patfile
|
|
|
|
cat patfile
|
|
|
|
aaa
|
|
|
|
aaa
|
|
|
|
bbb
|
|
|
|
bbb
|
|
|
|
|
|
|
|
|
|
|
|
echo aaa bbb ccc ddd eee | grep -f patfile -o
|
|
|
|
echo aaa bbb ccc ddd eee | grep -f patfile -o
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
在grep搜索结果中包括或者排除指定文件:
|
|
|
|
在grep搜索结果中包括或者排除指定文件:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
#只在目录中所有的.php和.html文件中递归搜索字符"main()"
|
|
|
|
#只在目录中所有的.php和.html文件中递归搜索字符"main()"
|
|
|
|
grep "main()" . -r --include *.{php,html}
|
|
|
|
grep "main()" . -r --include *.{php,html}
|
|
|
|
|
|
|
|
|
|
|
|
#在搜索结果中排除所有README文件
|
|
|
|
#在搜索结果中排除所有README文件
|
|
|
|
grep "main()" . -r --exclude "README"
|
|
|
|
grep "main()" . -r --exclude "README"
|
|
|
|
|
|
|
|
|
|
|
|
#在搜索结果中排除filelist文件列表里的文件
|
|
|
|
#在搜索结果中排除filelist文件列表里的文件
|
|
|
|
grep "main()" . -r --exclude-from filelist
|
|
|
|
grep "main()" . -r --exclude-from filelist
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
使用0值字节后缀的grep与xargs:
|
|
|
|
使用0值字节后缀的grep与xargs:
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
```bash
|
|
|
|
# 测试文件:
|
|
|
|
# 测试文件:
|
|
|
|
echo "aaa" > file1
|
|
|
|
echo "aaa" > file1
|
|
|
|
echo "bbb" > file2
|
|
|
|
echo "bbb" > file2
|
|
|
|
echo "aaa" > file3
|
|
|
|
echo "aaa" > file3
|
|
|
|
|
|
|
|
|
|
|
|
grep "aaa" file* -lZ | xargs -0 rm
|
|
|
|
grep "aaa" file* -lZ | xargs -0 rm
|
|
|
|
|
|
|
|
|
|
|
|
#执行后会删除file1和file3,grep输出用-Z选项来指定以0值字节作为终结符文件名(\0),xargs -0 读取输入并用0值字节终结符分隔文件名,然后删除匹配文件,-Z通常和-l结合使用。
|
|
|
|
#执行后会删除file1和file3,grep输出用-Z选项来指定以0值字节作为终结符文件名(\0),xargs -0 读取输入并用0值字节终结符分隔文件名,然后删除匹配文件,-Z通常和-l结合使用。
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
grep静默输出:
|
|
|
|
grep静默输出:
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
```bash
|
|
|
|
grep -q "test" filename
|
|
|
|
grep -q "test" filename
|
|
|
|
# 不会输出任何信息,如果命令运行成功返回0,失败则返回非0值。一般用于条件测试。
|
|
|
|
# 不会输出任何信息,如果命令运行成功返回0,失败则返回非0值。一般用于条件测试。
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
打印出匹配文本之前或者之后的行:
|
|
|
|
打印出匹配文本之前或者之后的行:
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
```bash
|
|
|
|
# 显示匹配某个结果之后的3行,使用 -A 选项:
|
|
|
|
# 显示匹配某个结果之后的3行,使用 -A 选项:
|
|
|
|
seq 10 | grep "example" -A 3
|
|
|
|
seq 10 | grep "example" -A 3
|
|
|
|
或
|
|
|
|
或
|
|
|
|
grep -A 3 -i "example" demo_text
|
|
|
|
grep -A 3 -i "example" demo_text
|
|
|
|
|
|
|
|
|
|
|
|
# 显示匹配某个结果之前的3行,使用 -B 选项:
|
|
|
|
# 显示匹配某个结果之前的3行,使用 -B 选项:
|
|
|
|
seq 10 | grep "5" -B 3
|
|
|
|
seq 10 | grep "5" -B 3
|
|
|
|
2
|
|
|
|
2
|
|
|
|
3
|
|
|
|
3
|
|
|
|
4
|
|
|
|
4
|
|
|
|
5
|
|
|
|
5
|
|
|
|
|
|
|
|
|
|
|
|
# 显示匹配某个结果的前三行和后三行,使用 -C 选项:
|
|
|
|
# 显示匹配某个结果的前三行和后三行,使用 -C 选项:
|
|
|
|
seq 10 | grep "5" -C 3
|
|
|
|
seq 10 | grep "5" -C 3
|
|
|
|
2
|
|
|
|
2
|
|
|
|
3
|
|
|
|
3
|
|
|
|
4
|
|
|
|
4
|
|
|
|
5
|
|
|
|
5
|
|
|
|
6
|
|
|
|
6
|
|
|
|
7
|
|
|
|
7
|
|
|
|
8
|
|
|
|
8
|
|
|
|
|
|
|
|
|
|
|
|
# 如果匹配结果有多个,会用“--”作为各匹配结果之间的分隔符:
|
|
|
|
# 如果匹配结果有多个,会用“--”作为各匹配结果之间的分隔符:
|
|
|
|
echo -e "a\nb\nc\na\nb\nc" | grep a -A 1
|
|
|
|
echo -e "a\nb\nc\na\nb\nc" | grep a -A 1
|
|
|
|
a
|
|
|
|
a
|
|
|
|
b
|
|
|
|
b
|
|
|
|
--
|
|
|
|
--
|
|
|
|
a
|
|
|
|
a
|
|
|
|
b
|
|
|
|
b
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|