功能说明:查找文件里符合条件的字符串。
语 法:grep [-abcEFGhHilLnqrsvVwxy] [-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范 本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
如果要在一个或几个文本文件中查找一字符串,可以使用‘grep’命令。
grep pattern filename
grep pattern filename1 filename2
假设正在‘/usr/src/linux/Documentation’目录下搜索带字符串‘magic’的文件:
$ grep magic /usr/src/linux/Documentation/*
sysrq.txt:* How do I enable the magic SysRQ key?
sysrq.txt:* How do I use the magic SysRQ key?
默认情况下,‘grep’只搜索当前目录。如果此目录下有许多子目录时,
明确要求搜索子目录:grep -r
或明确忽略子目录:grep -d skip 结果等同于 默认情况
当然,如果预料到有许多输出,可以通过 管道 将其转到‘less’上阅读:
$ grep magic /usr/src/linux/Documentation/* | less
这样,就可以更方便地阅读。
命令行参数:
grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
grep -n pattern files: 打印匹配的行并追加行号.
grep -v pattern files 打印不包含pattern的行.
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,注意,对于grep -L pattern ./* , 假如当前子目录mydir中含有符合匹配条件的a.txt,但列不匹配文件名时却有mydir; 如果改为grep -L -r pattern ./* 才不会列出mydir.
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep 'pattern1\| pattern2' files :显示匹配 pattern1 或 pattern2 的行,注意, 要双引号或单引号,以及反斜杠。
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
正则表达式
^
锚定行的开始 如:'^grep'匹配所有以grep开头的行。
$
*
匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。
[]
匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^]
匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
(..)
标记匹配字符,如'(love)',love被标记为1。
\<
锚定单词的开始,
\>
锚定单词的结束,如'grep>'匹配包含以grep结尾的单词的行。
x'\{m\}'
重复字符x,m次,如:'0{5}'匹配包含5个o的行。 注意, 要双引号或单引号,以及反斜杠。
x'\{m,\}'
重复字符x,至少m次,如:'o{5,}'匹配至少有5个o的行。
x'\{m,n\}'
重复字符x,至少m次,不多于n次,如:'o{5,10}'匹配5--10个o的行。
例子:grep '[A-Z]...[0-9]' file 包含五个字符,以大写开头, 和一个数字结尾的行.
grep "$LOGNAME" file 包含变量内容的行, 注意必须用双引号, 单引号则无法引用变量.
结合find和grep
-print :表明find命令应输出其搜索到的和标准相匹配的文件名
# find -name "*.txt" -print -exec grep test {} \;
grep test {} \; :-exec参数的一部分.每次找到和-name参数中指定的条件相匹配的文件时,用来搜索单词test的grep命令将被执行。
{} :参数告诉find命令每次执行-exec部分的命令时插入匹配文件的完整路径和文件名。
\; :表示find每次找到一个匹配文件时其所执行的-exec部分的命令结束。
也可以将-print去掉。
语 法:grep [-abcEFGhHilLnqrsvVwxy] [-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范 本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
如果要在一个或几个文本文件中查找一字符串,可以使用‘grep’命令。
grep pattern filename
grep pattern filename1 filename2
假设正在‘/usr/src/linux/Documentation’目录下搜索带字符串‘magic’的文件:
$ grep magic /usr/src/linux/Documentation/*
sysrq.txt:* How do I enable the magic SysRQ key?
sysrq.txt:* How do I use the magic SysRQ key?
默认情况下,‘grep’只搜索当前目录。如果此目录下有许多子目录时,
明确要求搜索子目录:grep -r
或明确忽略子目录:grep -d skip 结果等同于 默认情况
当然,如果预料到有许多输出,可以通过 管道 将其转到‘less’上阅读:
$ grep magic /usr/src/linux/Documentation/* | less
这样,就可以更方便地阅读。
命令行参数:
grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
grep -n pattern files: 打印匹配的行并追加行号.
grep -v pattern files 打印不包含pattern的行.
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,注意,对于grep -L pattern ./* , 假如当前子目录mydir中含有符合匹配条件的a.txt,但列不匹配文件名时却有mydir; 如果改为grep -L -r pattern ./* 才不会列出mydir.
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep 'pattern1\| pattern2' files :显示匹配 pattern1 或 pattern2 的行,注意, 要双引号或单引号,以及反斜杠。
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
正则表达式
^
锚定行的开始 如:'^grep'匹配所有以grep开头的行。
$
锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
.
匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。*
匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。
[]
匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^]
匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
(..)
标记匹配字符,如'(love)',love被标记为1。
\<
锚定单词的开始,
\>
锚定单词的结束,如'grep>'匹配包含以grep结尾的单词的行。
x'\{m\}'
重复字符x,m次,如:'0{5}'匹配包含5个o的行。 注意, 要双引号或单引号,以及反斜杠。
x'\{m,\}'
重复字符x,至少m次,如:'o{5,}'匹配至少有5个o的行。
x'\{m,n\}'
重复字符x,至少m次,不多于n次,如:'o{5,10}'匹配5--10个o的行。
例子:grep '[A-Z]...[0-9]' file 包含五个字符,以大写开头, 和一个数字结尾的行.
grep "$LOGNAME" file 包含变量内容的行, 注意必须用双引号, 单引号则无法引用变量.
结合find和grep
-print :表明find命令应输出其搜索到的和标准相匹配的文件名
# find -name "*.txt" -print -exec grep test {} \;
grep test {} \; :-exec参数的一部分.每次找到和-name参数中指定的条件相匹配的文件时,用来搜索单词test的grep命令将被执行。
{} :参数告诉find命令每次执行-exec部分的命令时插入匹配文件的完整路径和文件名。
\; :表示find每次找到一个匹配文件时其所执行的-exec部分的命令结束。
也可以将-print去掉。