详解Shell中的grep命令
⽤‘grep'搜索⽂本⽂件
如果您要在⼏个⽂本⽂件中查⼀字符串,可以使⽤‘grep'命令。‘grep'在⽂本中搜索指定的字符串。举个例⼦:假设您正
在‘/usr/src/linux/Documentation'⽬录下搜索带字符串‘magic'的⽂件:
$ grep magic /usr/src/linux/Documentation/*
<:* How do I enable the magic SysRQ key?
<:* How do I use the magic SysRQ key?
其中⽂件‘'包含该字符串,讨论的是 SysRQ 的功能。
默认情况下,‘grep'只搜索当前⽬录。如果此⽬录下有许多⼦⽬录,‘grep'会以如下形式列出:
grep: sound: Is a directory
这可能会使‘grep'的输出难于阅读。这⾥有两种解决的办法:
明确要求搜索⼦⽬录:grep -r
忽略⼦⽬录:grep -d skip
当然,如果预料到有许多输出,您可以通过管道
将其转到‘less'上阅读:
$ grep magic /usr/src/Linux/Documentation/* | less
这样,您就可以更⽅便地阅读。
有⼀点要注意,您必需提供⼀个⽂件过滤⽅式(搜索全部⽂件的话⽤*)。如果您忘了,‘grep'会⼀直等着,直到该程序被中断。如果您遇到了这样的情况,按ctrl+c,然后再试。(important!!)
下⾯是⼀些有意思的命令⾏参数:
grep -i pattern files:不区分⼤⼩写地搜索。默认情况区分⼤⼩写,
grep -l pattern files :只列出匹配的⽂件名,
grep -L pattern files :列出不匹配的⽂件名,
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 man * 会匹配 ‘Batman'、‘manic'、‘man'等,
grep '\<man' * 匹配‘manic'和‘man',但不是‘Batman',
grep '\<man\>' 只匹配‘man',⽽不是‘Batman'或‘manic'等其他的字符串。
'^':指匹配的字符串在⾏⾸,
'$':指匹配的字符串在⾏尾,
如果您不习惯命令⾏参数,可以试试图形界⾯的‘grep',如 reXgrep 。这个软件提供 AND、OR、NOT 等语法,还有漂亮的按钮 :-) 。如果您只是需要更清楚的输出,不妨试试 fungrep 。
Grep的常⽤命令语法
1. 双引号引⽤和单引号引⽤
在g r e p命令中输⼊字符串参数时,最好将其⽤双引号括起来。例如:”m y s t r i n g”。这样做有两个原因,⼀是以防被误解为s h e l l命令,⼆是可以⽤来查多个单词组成的字符串,例如:”jet plane”,如果不⽤双引号将其括起来,那么单词 p l a n e 将被误认为是⼀个⽂件,查询结果将返回”⽂件不存在”的错误信息。
在调⽤变量时,也应该使⽤双引号,诸如: g r e p”$ M Y VA R”⽂件名,如果不这样,将没有返回结果。
在调⽤模式匹配时,应使⽤单引号.[root@mypc ]# echo `grep ` (#注意是反单引号)
2. 常⽤的g r e p选项有:
-c 只输出匹配⾏的计数。
-i 不区分⼤⼩写(只适⽤于单字符)。
grep命令有什么用-h 查询多⽂件时不显⽰⽂件名。
-l 查询多⽂件时只输出包含匹配字符的⽂件名。
-n 显⽰匹配⾏及⾏号。
-s 不显⽰不存在或⽆匹配⽂本的错误信息。
-v 显⽰不包含匹配⽂本的所有⾏。
3. 特殊的–在多个⽂件中进⾏查询
$ grep “sort”*.doc ( #在当前⽬录下所有. d o c⽂件中查字符串”s o r t”)
$ grep “sort it” * (#或在所有⽂件中查询单词”sort it”)
接下来的所有⽰例是指在单个⽂件中进⾏查询
4. ⾏匹配
$ grep -c “48″ data.f
$ 4 (#g r e p返回数字4,意义是有4⾏包含字符串”4 8″。)
$ grep “48″ data.f (#显⽰包含”4 8″字符串的4⾏⽂本)
5. 显⽰满⾜匹配模式的所有⾏⾏数:
[root@mypc oid2000]# grep -n
1:1234
3:1234ab
6. 精确匹配
[root@mypc oid2000]# grep “1234\>”
1234
7. 查询空⾏,查询以某个条件开头或者结尾的⾏。
结合使⽤^和$可查询空⾏。使⽤- n参数显⽰实际⾏数
[root@mypc oid2000]# grep -n “^$” (返回结果 2: #说明第⼆⾏是空⾏)
[root@mypc oid2000]# grep -n “^abc” (#查询以abc开头的⾏)
[root@mypc oid2000]# grep -n “abc$” (#查询以abc结尾的⾏)
8. 匹配特殊字符,查询有特殊含义的字符,诸如$ . ‘ ” * [] ^ | \ + ? ,必须在特定字符前加\。
[root@mypc oid2000]# grep “\.” (#在中查询包含”.”的所有⾏)
[root@mypc oid2000]# grep “my\.conf” (#查询有⽂件名my. c o n f的⾏)
9. ⽬录的查询
[root@mypc oid2000]# ls -l |grep “^d” (#如果要查询⽬录列表中的⽬录)
[root@mypc oid2000]# ls -l |grep “^d[d]“ (#在⼀个⽬录中查询不包含⽬录的所有⽂件)
[root@mypc]# ls -l |grpe “^d…..x..x” (#查询其他⽤户和⽤户组成员有可执⾏权限的⽬录集合)
以上所述是⼩编给⼤家介绍的Shell中的grep命令,希望对⼤家有所帮助,如果⼤家有任何疑问欢迎给我留⾔,⼩编会及时回复⼤家的!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论