我们查看一文件,想查看文件里有没有自己想要的信息,假如文件内容很多,使用查看命令挨个地查看,就太浪费时间。这时使用grep命令,就可以快速地知道有没有阅读者想要的信息,并快速找到它。
grep 被搜寻内容 文件
grep-指定文件中搜索指定字符内容。
演示:
grep ubuntu /etc/passwd
从/etc/passwd文件里搜索字符串“ubuntu”,如果有就把整行内容显示。
说几个参数:
-v 显示不包含匹配文本的所有行,意思取反值。
-n 显示匹配行及行号
-l 只显示文件名
-i 忽略大小写
-r 检索指定路径下所有文件,递归查找子目录
grep -rl 等于grep也有文件查找功能,根据文件内容查找文件。
grep的模糊查询
grep '^a ' stdio.h
在stdio.h文件中查找以a开头的行
grep 'a$' stdio.h
在stdio.h文件中查找以a结尾的行
grep '^a.b ' stdio.h
在stdio.h文件中查找以a任意一个字符b开头的行
^、$、.和在正则表达式中意思一样
^ 从行首开始匹配 $ 至行尾 . 任意单个字符
拓展:
grep命令不光用来检索文件内容,grep通常配合“|(管道)”,检索各种信息列表。
系统常用命令:管道
定义:前一个命令的输出是后一个命令的输入。即一个命令的输出可以通过管道做为另一个命令的输入。
符号表示:”|” 竖线
如何理解呢?举个简单例子
ls -l /etc | wc -l
① ls -l /etc:显示/etc目录下文件列表
② wc -l:查看一个文件的行数
这是由两个命令组成的一个大命令,命令①输出的信息没有直接打印出来,而是通过管道传给了命令②。
本来命令②正确的写法应该是:
wc -l filename
从指定文件中获取处理的信息。有了管道帮助,wc命令可从管道中获取处理的信息。
/etc下是不是共有187个文件和目录,可以用WinSCP查看下:
看来是正确的。
再做个grep和|的演示:
以前我们罗列/etc目录的文件时,显示187个,找某些文件特别费劲,通过这两节课内容,我们可使用这两个命令快速找到某个文件:
find /etc -name '*关键字*' -ls ls -l /etc | grep 关键字
注:命令中使用管道次数不限制,比如:
cat passwd | grep root | wc
cat命令的输出作为grep的输入进行查找root
grep命令的输出又作为wc的输入统计行数
注:管道它是Linux七种文件类型之一,用“p”表示,这类文件多用于进程间的通信方面。