你曾经遇到过在文件中查找特定字符串或模式的任务,但是不知道从哪里开始查找?那么,这里是grep来救援!
12 Grep命令示例
grep是配备在Linux上的每一个分布的功能强大的文件搜索模式。 如果出于某种原因,这是不是你的系统上安装,你可以很容易地通过它你的包管理器进行安装(在Debian / Ubuntu的 apt-get和Yum在RHEL / CentOS的 / Fedora的 )。
$ sudo apt-get install grep #Debian/Ubuntu
$ sudo yum install grep #RHEL/CentOS/Fedora
我发现,让你的脚湿使用grep最简单方法是在短短的潜水权,并使用一些真实的例子。
1.搜索和查找文件
比方说,您刚刚安装新的Ubuntu的新副本你的机器上,那你要给Python脚本的一个镜头。 你一直在网上淘找教程,但你看到有使用两个不同版本的Python,而你不知道哪一个是由Ubuntu的安装程序安装到系统上,或者如果它安装的模块。只需运行此命令:
# dpkg –l | grep –i python
示例输出
ii python2.7 2.7.3-0ubuntu3.4 Interactive high-level object-oriented language (version 2.7)
ii python2.7-minimal 2.7.3-0ubuntu3.4 Minimal subset of the Python language (version 2.7)
ii python-openssl 0.12-1ubuntu2.1 Python wrapper around the OpenSSL library
ii python-pam 0.4.2-12.2ubuntu4 A Python interface to the PAM library
首先,我们跑的dpkg -l,其中列出了在系统上安装* .deb软件包。 第二,我们的管道输出到grep -ipython,它简单状态“去grep和过滤掉,并返回在它的Python的一切。”-i选项有忽略大小写,以及grep是区分大小写。 使用-i选项进入,除非你当然想明确更具体的搜索的好习惯。
2.搜索和过滤文件
grep也可以用来搜索和单个文件或多个文件中进行筛选。让我们来看这个场景:
您遇到一些麻烦你的Apache Web服务器 ,并且您已经接触了在网络上寻求一些帮助许多真棒论坛之一。 那种灵魂谁回复你要求你发布你的/ etc / apache2的/网站的可用/默认SSL文件的内容。你会不会更容易,那个帮助你的家伙,以及每个人阅读它,如果你可以删除所有的注释行?你可以!只需运行:
# grep –v “#” /etc/apache2/sites-available/default-ssl
-v选项告诉grep来反转它的输出,这意味着,而不是打印匹配行,却反其道而行之,并打印所有不匹配的表达,在这种情况下的线条时,#注释行。
3.仅查找所有.mp3文件
grep可以是用于从标准输出滤波非常有用的。 例如,假设您有一个完整的文件夹充满了一堆不同格式的音乐文件。 你想找到所有从艺术家JayZ的* .mp3文件,但你不希望任何的混音曲目。 使用find命令与一对夫妇的grep管道将这样的伎俩:
# find . –name “*.mp3” | grep –i JayZ | grep –vi “remix”
在这个例子中,我们使用的是发现打印的所有文件以* .MP3扩展 ,管道就到grep -i筛选出并打印名为“JayZ”,然后另一条管道的所有文件,这些文件过滤到grep -VI出,并且不与串(在任何情况下)“ 混音 ”打印所有的文件名。
4.显示搜索字符串之前或之后的行数
选项另一对夫妇是-A和-B开关,显示线的匹配线和数目,要么来之前或搜索字符串之后。 虽然手册页提供了更详细的解释,我觉得最容易记住的选项-A = 后 ,和-B 之前 =:
# ifconfig | grep –A 4 eth0
# ifconfig | grep -B 2 UP
5.打印匹配周围的线数
grep 的-c选项相似,但不是打印的前或后的字符串来的线条,它打印在任一方向的线路:
# ifconfig | grep –C 2 lo
6.计数匹配数
类似管道grep命令字符串字数(WC程序)的grep 内置选项可以执行同样的话:
# ifconfig | grep –c inet6
7.按给定字符串搜索文件
在编译错误调试文件时grep-n选项是非常有用的。它在给定搜索字符串的文件中显示行号:
# grep –n “main” setup..py
8.在所有目录中递归搜索字符串
如果您想寻找与所有子目录沿当前目录的字符串,可以指定-r选项递归搜索:
# grep –r “function” *
9.搜索整个花样
通过-w选项对grep是字符串中的整个模式的搜索。例如,使用:
# ifconfig | grep –w “RUNNING”
将在引号中打印包含模式的行。另一方面,如果你尝试:
# ifconfig | grep –w “RUN”
不会返回任何内容,因为我们不是搜索模式,而是整个单词。
10.在Gzipped文件中搜索字符串
值得一提的是grep 派生。首先是zgrep,其中,类似ZCAT,是压缩文件上调用使用。 它采用相同的选项grep和以同样的方式使用:
# zgrep –i error /var/log/syslog.2.gz
11.匹配文件中的正则表达式
该egrep是另一种衍生的意思是“ 扩展全局正则表达式 ”。 它可以识别更多的表达元字符在这种+? |和()。
-E选项调用。
# grep –E
12.搜索固定模式字符串
的比fgrep搜索一个或多个文件的列表的固定模式串。 它是一样的grep -F。 使用fgrep一样的一个常用方法是模式的文件传递给它:
# fgrep –f file_full_of_patterns.txt file_to_search.txt
这仅仅是一个起点使用grep,但你可能能够看到,它是无价的多种用途。 除了我们已经实现了简单的行命令中,grep可以用来编写功能强大的cron作业,和强大的shell脚本 ,对于一个开始。
手册页的选项,并拿出服务于自己的目的grep表达式!