有没有做家具特卖的网站,北京网站搜索引擎优化,湖南省做网站的,做网站的基本条件如何使用 Grep 命令在 Linux 中搜索文件
Grep 命令代表 “全局正则表达式输出” 是 Linux 中最强大和最常用的命令之一。
Grep 在一个或多个输入文件中搜索与给定模式匹配的行#xff0c;并将每个匹配行写入标准输出。 如果没有指定文件#xff0c;则 grep 从标准输入读取并将每个匹配行写入标准输出。 如果没有指定文件则 grep 从标准输入读取标准输入通常是另一个命令的输出。
在本教程中我们将通过实际示例和最常见的 GNU grep 选项的详细说明向您展示如何使用 grep 命令。
Grep命令语法
在讨论如何使用Grep命令之前让我们先回顾一下基本语法。
Grep实用程序表达式采用以下形式
grep [OPTIONS] PATTERN [FILE...]方括号中的项目是可选的。
OPTIONS - 零个或多个选项。 Grep提供了许多控制其行为的选项。PATTERN - 搜索模式。FILE - 零个或多个输入文件名。
如何使用 Grep 在文件中搜索字符串
grep命令的最基本用法是在文件中搜索字符串文本。
例如要显示包含字符串bash的/ etc / passwd文件中的行可以使用以下命令
grep bash /etc/passwd输出应该如下所示
root:x:0:0:root:/root:/bin/bash
pi:x:1000:1000:,,,:/home/pi:/bin/bash如果字符串包含空格则需要将其用单引号或双引号括起来
grep Gnome Display Manager /etc/passwdGrep反转匹配排除
要显示与模式不匹配的行请使用-v或–invert-match选项。
例如要显示/ etc / passwd文件中不包含字符串nologin的行可以使用以下命令
grep -v nologin /etc/passwd
root❌0:0:root:/root:/bin/bash
colord❌124:124::/var/lib/colord:/bin/false
git❌994:994:git daemon user:/:/usr/bin/git-shell
linux265❌1000:1000:linux265:/home/linux265:/bin/bash如何使用 Grep 在命令输出中搜索字符串
相反如果指定输入文件则可以将另一个命令的输出传递给grep然后仅显示与给定模式匹配的行。
例如要查找作为用户www-data在系统上运行的进程可以使用以下命令
ps -ef | grep www-data
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www
root 18272 17714 0 16:00 pts/0 00:00:00 grep --colorauto --exclude-dir.bzr --exclude-dirCVS --exclude-dir.git --exclude-dir.hg --exclude-dir.svn www-data
www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process
www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process您还可以在命令中链接多个管道。 正如您在上面的输出中看到的那样还有一行包含grep进程。 如果您不希望显示该行则将输出传递给另一个grep实例如下所示。
ps -ef | grep www-data | grep -v grep
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www
root 18272 17714 0 16:00 pts/0 00:00:00 grep --colorauto --exclude-dir.bzr --exclude-dirCVS --exclude-dir.git --exclude-dir.hg --exclude-dir.svn www-data
www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process
www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager processGrep 递归搜索
要递归搜索模式请使用 -r 选项或 --recursive。 这将搜索指定目录中的所有文件跳过递归遇到的符号链接。 要遵循所有符号链接请使用 -R 选项或 --dereference-recursive。
在下面的示例中我们在 /etc 目录中的所有文件中搜索字符串linux265.com
grep -r linux265.com /etc该命令将打印以文件的完整路径为前缀的匹配行。
/etc/hosts:127.0.0.1 node2.linu265.com
/etc/nginx/sites-available/linux265e.com: server_name linux265.com www.linux265.com;如果代替 -r 你使用 -R 选项 grep 将遵循所有符号链接
grep -R linuxize.com /etc注意输出的最后一行。 上面的示例中未打印该行因为Nginx的启用站点的目录中的文件是sites-available目录中的配置文件的符号链接。
/etc/hosts:127.0.0.1 node2. linux265.com
/etc/nginx/sites-available/linux265.com: server_name linux265.com www linux265.com;
/etc/nginx/sites-enabled/linux265.com: server_name linux265.com www. linux265.com;Grep 仅显示文件名
要禁止默认 grep 输出并仅打印包含匹配模式的文件的名称可以使用 -l或 --files-with-matches选项。
例如搜索当前工作目录中以 .conf 结尾的所有文件并仅打印包含字符串 linux265.com 类型的文件的名称
grep -l linux265.com *.conf输出看起来像这样
tmux.conf
haproxy.conf-l 选项通常与递归选项 -R 结合使用
grep -Rl linux265.com /tmpGrep 例子
默认情况下grep 命令区分大小写这意味着大写和小写字符被视为不同。
要在搜索时忽略大小写请使用-i选项或 --ignore-case。
例如在没有任何选项的情况下搜索 Zebra 时以下命令将不显示任何输出即存在匹配的行。
grep Zebra /usr/share/words但是如果使用-i选项执行不区分大小写的搜索它将匹配大写和小写字母
grep -i Zebra /usr/share/words指定 “Zebra” 将匹配 “zebra” “ZEbrA” 或该字符串的大写和小写字母的任何其他组合。
zebra
zebras
zebrasGrep 完全匹配
当搜索 gnu grep 时还会打印 gnu 嵌入较大单词的行例如 cygnus 或 magnum。 grep gnu /usr/share/words
cygnus
gnu
interregnum
lgnu9d
lignum
magnum
magnuson
sphagnum
wingnut要仅返回指定字符串为整个单词的行由非单词字符括起可以使用 -w或 --word-regexp选项。 单词字符包括字母数字字符a-zA-Z和0-9和下划线_。 所有其他字符都被视为非单词字符。 如果运行与上面相同的命令包括-w选项则 grep 命令将仅返回包含 gnu 作为单独单词的那些行。
grep -w gnu /usr/share/words
gnuGrep 显示行号
要显示包含与模式匹配的 sting 的行数请使用 -n或 --line-number选项。 使用此选项时grep 会将匹配打印到标准输出并以找到的行号为前缀。
例如要显示 /etc/services 文件中包含前缀为匹配行号的字符串 bash 的行可以使用以下命令
grep -n 10000 / etc / services下面的输出向我们显示匹配在线 10423 和 10424 上找到。
10423ndmp 10000 / tcp
10424ndmp 10000 / udpGrep 匹配数
要将匹配行的计数打印到标准输出请使用 -c或 --count选项。
在下面的示例中我们计算将/usr/bin/zsh作为 shell 的帐户数。
grep -c /usr/bin/zsh /etc/passwd输出
4Grep 多个字符串模式
OR运算符|可以连接两个或多个搜索模式。
默认情况下Grep将模式解释为基本正则表达式其中元字符如| 失去他们的特殊意义必须使用他们的背面版本。
在下面的示例中我们在 nginx 日志错误文件中搜索所有出现的单词 fatalerror 和 critical
grep fatal\|error\|critical /var/log/nginx/error.log如果使用扩展正则表达式选项 -E或 --extended-regexp则使用运算符 | 不应该逃脱如下所示
grep -E damal | error | critical /var/log/nginx/error.logGrep 正则表达式
GNU Grep 有两个正则表达式功能集Basic 和 Extended。默认情况下Grep 将模式解释为基本正则表达式要切换到扩展正则表达式需要使用 -E 选项。
当在基本正则表达式模式中使用时除元字符之外的所有其他字符实际上是与自身匹配的正则表达式。以下是最常用的元字符列表
01、使用插入符号符号匹配行开头的表达式。在以下示例中字符串 kangaroo仅在它出现在行的最开头时才匹配。
grep ^kangaroo file.txt02、使用 $ 符号匹配行尾的表达式。在以下示例中字符串 kangaroo$ 仅在它出现在一行的最后才匹配。
grep kangaroo$ file.txt03、使用 . 点符号以匹配任何单个字符。例如要匹配以 kan 开头的任何内容然后有两个字符并以字符串roo 结尾您可以使用以下模式
grep kan..roo file.txt使用 []括号匹配括号中的任何单个字符。例如找到包含 accept 或 accent 的行您可以使用以下模式
grep acce[np]t file.txt使用 [^]括号匹配括号中的任何单个字符。以下模式将匹配包含 coany_leter_except_la 的任何字符串组合例如 cocacobalt 等但与包含 cola 的行不匹配
grep co[^l]a file.txt要逃避下一个字符的特殊含义请使用 \反斜杠符号。
Grep 扩展正则表达式
要将模式解释为扩展正则表达式请使用 -E或 --extended-regexp选项。 扩展正则表达式包括所有基本元字符以及其他元字符以创建更复杂和强大的搜索模式。 贝娄是一些例子
01、匹配并提取给定文件中的所有电子邮件地址
grep -E -o \b[A-Za-z0-9._%-][A-Za-z0-9.-]\.[A-Za-z]{2,6}\b file.txt02、匹配并提取给定文件中的所有有效 IP 地址
grep -E -o (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) file.txt-o 选项用于仅打印匹配的字符串。
Grep 匹配前输入出多行
要在匹配行后打印特定数量的行请使用 -B或 --before-context选项。
例如要在匹配行之前显示 5 行前导上下文可以使用以下命令
grep -B 5 root /etc/passwdGrep 匹配后输入出多行
要在匹配行后打印特定数量的行请使用 -A或 --after-context选项。
例如要在匹配行后显示5行尾随上下文可以使用以下命令
grep -A 5 root /etc/passwd文件内容查找
grep -rnw fontlinux如何查询目录文件中是否包含某个关键字
在 Linux 系统中可以使用 grep 命令来查询目录文件中是否包含某个关键字。
例如如果你想查询当前目录下的所有文件中是否包含关键字 “keyword”可以使用以下命令
grep -r keyword .在这个命令中. 表示当前目录-r 表示递归地搜索目录下的所有文件。
如果有任何文件包含关键字 “keyword”则 grep 命令会输出包含该关键字的行。