linux查找文本命令 grep
- 实例
cat test_grep.txt
abc def hic lmn abc
123 456 1.23 4.5 321
ABC Def hIc lmN ABC
ABC Def hIc lmN dsf
A BC Def hIc lmN ABC
You are a good boy
you are a good girl
you are not a good girl
That's a very lovely dog
例一:
grep -c 'good' test_grep.txt #3 cat test_grep.txt | grep 'good' | wc -l #3
这两种方法都可以统计含有‘good’的行数,但是第一种方法明显更简练。
例二:
grep -i 'abc' test_grep.txt #abc def hic lmn abc #ABC Def hIc lmN ABC #ABC Def hIc lmN dsf #A BC Def hIc lmN ABC
grep使用的正则表达式没有像其他语言那样的修饰符,如i,s,m。对于忽略大小写的匹配,可以用选项-i实现。
例三:
grep -n 'good' test_grep.txt #6:You are a good boy #7:you are a good girl #8:you are not a good girl
有时候希望得到匹配行的行号,-n 这个时候就显得很有用了。
例四:
grep -v '[a-zA-z]' test_grep.txt #123 456 1.23 4.5 321
-v是个很有用的选项,有时要匹配的表达式正则表达式很难写,但是相反的匹配表达式却很好写,用-v选项进行反向查找可起到事半功倍的效果。例如在”linux查找文本命令 grep(一)“中提到的查找一个目录下的所有文件但不包含目录,用反向查找就比较方便。
例五:
grep -w 'good' test_grep.txt #You are a good boy #you are a good girl #you are not a good girl grep -w 'good girl' test_grep.txt #you are not a good girl
-w与用“\<” "\>"效果相同,但书写相对简单。
例六:
ls
anaconda-ks.cfg Desktop install.log install.log.syslog test_grep2.txt test_grep.txt
grep -l 'good' * #install.log #test_grep2.txt #test_grep.txt
选项-l可用来查找包含要搜索词的文件名。在查找文件时很有用。
- grep的选项
选项 |
功能 |
---|---|
-b |
在每一行前面加上其所在的块号,根据上下文定位磁盘块时可能会用到 |
-c |
显示匹配到的行的数目,而不是显示行的内容 |
-h |
不显示文件名 |
-i |
比较字符时忽略大小写的区别 |
-l(小写的字母L) |
只列出匹配行所在文件的文件名(每个文件名只列一次),文件名之间用换行符分隔 |
-n |
在每一行前面加上它在文件中的相对行号 |
-s |
无声操作,即只显示报错信息,用于检查退出状态 |
-v |
反向查找,只显示不匹配的行 |
-w |
把表达式作为词来查找,就好像它被\<和\>夹着那样。只适用于grep(并非所有版本的grep都支持这一功能,譬如,SCO UNIX就不支持) |