该grep命令是Linux终端环境中最有用的命令之一。grep全称为global regular expression print(全局正则表达式打印)。这意味着您可以grep用来查看接收到的输入是否与指定的模式匹配。这个看似微不足道的程序非常强大。它基于复杂规则对输入进行排序的能力,从而使其成为众多命令链中相当流行的链接。在本教程中,您将探索grep命令的选项,然后将深入研究使用正则表达式进行更高级的搜索。在本教程中,您将使用grep在GNU通用公共许可证版本3中搜索各种单词和短语。如果您使用的是Ubuntu系统,则可以在文件/usr/share/common-licenses夹中找到该文件。将其复制到您的主目录:linuxmi@linuxmi:~/www.linuxmi.com$ cp /usr/share/common-licenses/GPL-3 .如果您在其他系统上,请使用以下curl命令下载副本:linuxmi@linuxmi:~/www.linuxmi.com$ curl -o GPL-3 https://www.gnu.org/licenses/gpl-3.0.txt您还将在本教程中使用BSD许可证文件。在Linux上,可以使用以下命令将其复制到主目录:linuxmi@linuxmi:~/www.linuxmi.com$ cp /usr/share/common-licenses/BSD .
cat << 'EOF' > BSD
Copyright (c) The Regents of the University of California.
All rights reserved.Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
EOF在最基本的形式中,您grep用来匹配文本文件中的文字模式。这意味着,如果您传递grep一个单词进行搜索,它将打印出包含该单词的文件中的每一行。执行以下命令以grep搜索包含单词的每一行GNU:linuxmi@linuxmi:~/www.linuxmi.com$ grep 'GNU' GPL-3第一个参数GNU是您要搜索的模式,第二个参数GPL-3是要搜索的输入文件。默认情况下,grep将在输入文件中搜索确切的指定模式,并返回找到的行。通过向中添加一些可选标志,可以使此行为更有用grep。如果要grep忽略搜索参数的“大小写”并同时搜索大小写变体,则可以指定“ -i或” --ignore-case选项。license使用以下命令在与以前相同的文件中搜索单词的每个实例(大小写,大小写混合):linuxmi@linuxmi:~/www.linuxmi.com$ grep -i 'license' GPL-3结果包括:LICENSE,license和License:
如果存在带有的实例LiCeNsE,则该实例也将被返回。如果要查找不包含指定模式的所有行,则可以使用-v或--invert-match选项。the使用以下命令搜索BSD许可证中不包含单词的每一行:linuxmi@linuxmi:~/www.linuxmi.com$ grep -v 'the' BSD由于您未指定“忽略大小写”选项,因此最后两项没有单词the。了解匹配发生的行号通常很有用。您可以使用-n或--line-number选项执行此操作。重新运行上一个示例,并添加以下标志:linuxmi@linuxmi:~/www.linuxmi.com$ grep -vn 'the' BSD现在,如果您要更改不包含的每一行,就可以引用行号the。使用源代码时,这特别方便。在引言中,您了解到grep代表“全局正则表达式打印”。“正则表达式”是描述特定搜索模式的文本字符串。不同的应用程序和编程语言实现的正则表达式略有不同。在本教程中,我们将只探索grep描述其模式的一小部分。上面的例子,当我们搜索单词“GNU”和“the”时,我们实际上正在搜索非常简单的正则表达式,它匹配字符“GNU”和“the”的确切字符串。这是有帮助的,总是认为这些匹配的字符串,而不是匹配一个字。这将变得更加重要的区别,因为我们学习更复杂的模式。精确指定要匹配的字符的模式称为“字面值”,因为它们与字面上的字符匹配。除非被其他表达机制修改,否则所有字母和数字字符(以及某些其他字符)在字面上匹配。锚点是特殊字符用来匹配任意的单字符,除了换行符。但点字符必须匹配一个字符,如果在点字符的位置没有字符,那么模式就不成立。例如,使用锚点,您可以指定只想知道与该行GNU开始处匹配的行。为此,您可以^在文字字符串之前使用锚。运行以下命令以搜索GPL-3文件并查找GNU在行的开头出现的行:linuxmi@linuxmi:~/www.linuxmi.com$ grep '^GNU' GPL-3GNU General Public License for most of our software; it applies also to
GNU General Public License, you may choose any version ever published
同样,您可以在$模式的末尾使用定位符来指示匹配仅在行的末尾才有效。linuxmi@linuxmi:~/www.linuxmi.com$ grep 'and$' GPL-3
在正则表达式中使用句点字符(.)表示在指定位置可以存在任何单个字符。例如,要匹配GPL-3文件中包含两个字符和字符串的所有内容cept,可以使用以下模式:linuxmi@linuxmi:~/www.linuxmi.com$ grep '..cept' GPL-3
如您所见,输出包含两个词的accept和except和变体的实例。这种模式也将匹配z2cept。通过将一组字符放在方括号(\[和\])中,可以指定该位置处的字符可以是方括号组中找到的任何一个字符。例如,要查找包含too或的行two,您可以使用以下模式来简洁地指定这些变体:linuxmi@linuxmi:~/www.linuxmi.com$ grep 't[wo]o' GPL-3
括号符号为您提供了一些有趣的选项。您可以通过将方括号内的字符列表以一个字符开头,使模式与方括号内的字符(除字符之外)匹配^。此示例类似于模式.ode,但与模式不匹配code:linuxmi@linuxmi:~/www.linuxmi.com$ grep '[^c]ode' GPL-31. Source Code.
model, to give anyone who possesses the object code either (1) a
the only significant mode of use of the product.
notice like this when it starts in an interactive mode:
方括号的另一个有用特性是,您可以指定一个字符范围,而不是逐个输入每个可用字符。这意味着,如果你想找到每一行以一个大写字母开头,你可以使用以下模式:linuxmi@linuxmi:~/www.linuxmi.com$ grep '^[A-Z]' GPL-3
由于某些传统的排序问题,使用POSIX字符类而不是您刚才使用的字符范围通常更准确。有许多字符类不在本指南的范围内,但是一个可以完成与上一个示例相同过程的示例\[:upper:\]在方括号选择器中使用了字符类:linuxmi@linuxmi:~/www.linuxmi.com$ grep '^[[:upper:]]' GPL-3最后,最常用的元字符之一是星号或*,其意思是“将先前的字符或表达式重复零次或多次”。要查找GPL-3文件中包含左括号和右括号的每行,并且只有字母和空格之间,请使用以下表达式:linuxmi@linuxmi:~/www.linuxmi.com$ grep '([A-Za-z ]*)' GPL-3
到目前为止,您已经在表达式中使用了句点,星号和其他字符,但是有时您需要专门搜索这些字符。在某些情况下,您需要搜索原义句点或原义大括号,尤其是在使用源代码或配置文件时。由于这些字符在正则表达式中具有特殊含义,因此您需要“转义”这些字符以告知grep您在这种情况下不希望使用其特殊含义。通过\在通常具有特殊含义的字符前面使用反斜杠字符()可以对字符进行转义。例如,要查找以大写字母开头并以句点结尾的任何行,请使用以下表达式,该表达式转义结尾句点,以便它代表文字句点而不是通常的“任何字符”含义:linuxmi@linuxmi:~/www.linuxmi.com$ grep '^[A-Z].*\.$' GPL-3Output
Source.
License by making exceptions from one or more of its conditions.
License would be to refrain entirely from conveying the Program.
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
SUCH DAMAGES.
Also add information on how to contact you by electronic and paper mail.
grep 在查找文件内或文件系统层次结构中的模式时很有用,因此值得花一些时间来熟悉其选项和语法。正则表达式的用途更加广泛,可以与许多流行的程序一起使用。例如,许多文本编辑器实现了用于搜索和替换文本的正则表达式。此外,大多数现代编程语言都使用正则表达式对特定数据执行过程。一旦了解了正则表达式,您就可以将其知识转移到许多与计算机相关的常见任务上,从在文本编辑器中执行高级搜索到验证用户输入。
来自:Linux迷
链接:https://reurl.cc/7yDr8Q
官方站点:www.linuxprobe.com
Linux命令大全:www.linuxcool.com