通过14个实例彻底掌握 grep 命令的使用方法

Grep是Linux/Unix系统中的一个命令行工具,用于从文件中搜索文本或字符串。Grep代表全局正则表达式打印。当我们使用指定字符串运行grep命令时,如果匹配,则它将显示包含该字符串的文件行,而不修改现有文件的内容。

命令语法

$ grep  <Options> <Search String>  <File-Name>

命令选项:

Grep-Command-Options

(1) 在文件中搜索单词或字符串

当我们运行grep命令,后跟搜索字符串或模式时,它将打印文件的匹配行。示例如下所示。

例如:在文件 /etc/passwd 文件中搜索 nobody

$ grep nobody /etc/passwd
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
$

(2) 多文件中的搜索模式

可以使用grep命令在多个文件中搜索单词或模式。

例如:在 /etc/passwd,/etc/shadow, /etc/gshadow文件中搜索 linuxtechi

$ sudo grep linuxtechi /etc/passwd /etc/shadow /etc/gshadow

Search-Word-Multiple-files-Grep-command

(3) 打印与模式匹配的文件名

假设我们想列出包含单词“root”的文件名,可以在grep命令中使用“-l”选项,后跟单词(模式)和文件。

$ grep -l 'root' /etc/fstab /etc/passwd /etc/mtab
/etc/passwd
$

(4) 显示带有行号的输出行

使用 “-n” 选项显示与模式或单词匹配的行及其编号。

$ grep -n 'nobody' /etc/passwd
18:nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
$

(5) 反转模式匹配

使用grep命令中的选项 “-v”,我们可以显示与模式不匹配的行

$ grep -v 'nobody' /etc/passwd

Invert-Match-Pattern-Grep-Command

6) 打印以特定字符开头的所有行

Bash Shell 将插入符号 “^” 视为特殊字符,用于标记行或单词的开头。

让我们显示文件 /etc/passwd 中以 “backup” 开头的行

$ grep ^backup /etc/passwd
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
$

(7) 打印以特定字符结尾的所有行

Bash Shell 将美元符号 “$” 视为一个特殊字符,用于标记行或字的结尾。

让我们列出 /etc/passwd 中以 “bash” 结尾的所有行

$ grep bash$ /etc/passwd
root:x:0:0:root:/root:/bin/bash
linuxtechi:x:1000:1000:linuxtechi,,,:/home/linuxtechi:/bin/bash
$

(8) 递归搜索模式

“-r” 选项用于在文件夹和子文件夹中递归搜索模式。

假设我们想递归地搜索 /etc 文件夹中的模式 “nologin”

$ sudo grep -r nobody /etc
/etc/shadow:nobody:*:19101:0:99999:7:::
/etc/shadow-:nobody:*:19101:0:99999:7:::
/etc/passwd:nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
/etc/ssh/sshd_config:#AuthorizedKeysCommandUser nobody
/etc/passwd-:nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
$

(9) 打印文件中的所有空行

使用特殊字符组合 “^$” 打印文件中的所有空行

$ grep '^$' /etc/sysctl.conf

Print-Empty-Lines-Grep-Command

打印空行的行号

$ grep -n '^$' /etc/sysctl.conf

(10) 搜索时忽略字母大小写

“-i” 选项忽略模式和数据中的字母大小写

假设我们希望在 sysctl.conf 文件中搜索 “IP_Forward” 字符串

$ grep IP_Forward /etc/sysctl.conf
$
$ grep -i IP_Forward /etc/sysctl.conf
#net.ipv4.ip_forward=1
$

使用 “-w” 选项仅匹配整个单词

$ sudo sysctl -a | grep -w 'vm.swappiness'
vm.swappiness = 60
$

(11) 匹配多个模式

借助 grep 命令中的 “-e” 选项,我们可以在单个命令中搜索多个模式。

$ grep -e nobody -e mail /etc/passwd
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
$

或者使用如下方式

$ grep -E "nobody|mail" /etc/passwd
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
$

(12) 从文件中获取模式

grep命令中的 “-f” 选项允许从文件中获取模式。示例如下所示:

First create a search pattern file with name “grep_pattern” in your current working directory. In my case put following content in it.

首先在当前工作目录中创建名为 “grep_pattern” 的搜索模式文件,我已事先将以下内容放入其中。

$ cat grep_pattern
^linuxtechi
root
false$
$

现在尝试使用 “grep_pattern” 文件进行搜索

$ grep -f grep_pattern /etc/passwd

Takes-Pattern-from-file

(13) 计算与模式匹配的行数

“-c” 选项用于计算与搜索模式匹配的行数。

假设我们要计算 /etc/password 文件中以 “false” 结尾的行数

$ grep -c false$ /etc/passwd
6
$

(14) 打印模式匹配前后的N行

(a) 打印在模式匹配之前的四行,使用 “-B” 选项

$ grep -B 4 "games" /etc/passwd

Print-Lines-Before-Matching-Pattern-Grep-Command

(b) 打印在模式匹配之后的四行,使用 “-A” 选项

$ grep -A 4 "games" /etc/passwd

Print-Lines-After-Matching-Pattern-Grep-Command

© 打印在匹配模式周围的四行(前后各四行),使用 “-C” 选项

$ grep -C 4 "games" /etc/passwd

Print-Lines-Around-Matching-Pattern-Grep-Command

小编开源项目

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: grep 命令用于在文件中搜索指定的字符串。它可以帮助您查找文件中的特定内容,以便进行更深入的分析。使用 grep 命令的基本语法如下:grep [options] pattern [files] 例如,要在文件 test.txt 中搜索字符串 “Hello”,可以使用以下命令grep Hello test.txt ### 回答2: grepLinux系统中常用的文本搜索工具,用于在文件中查找特定的字符串或模式。它的常见用法格式为: grep [选项] [模式] [文件名] 选项是可选的,可以根据具体需求来使用。常用的选项有: - -i:忽略大小写,在搜索时不区分大小写。 - -r:递归搜索,对指定目录下的所有文件进行搜索。 - -l:只列出包含匹配模式的文件名,而不显示匹配的具体内容。 - -n:显示匹配行的行号。 - -v:只显示不匹配模式的行。 模式是要搜索的字符串或匹配模式,可以使用简单的字符串作为模式,也可以使用正则表达式。 文件名是要进行搜索的文件或目录名。如果没有指定文件名,则grep默认从标准输入中读取数据进行搜索。 下面是几个常见的例子: 1. grep 'hello' file.txt 在file.txt文件中搜索包含字符串"hello"的行,并将匹配的行输出。 2. grep -i 'hello' file.txt 在不区分大小写的情况下,搜索file.txt文件中包含字符串"hello"的行。 3. grep -r 'hello' dir/ 递归搜索dir目录下的所有文件,查找包含字符串"hello"的行。 4. grep -l 'hello' file1.txt file2.txt 只列出file1.txt和file2.txt中包含字符串"hello"的文件名。 5. grep -n 'hello' file.txt 在file.txt文件中搜索包含字符串"hello"的行,并显示匹配行的行号。 以上是grep命令的一些常用用法,可以根据具体的需求和场景来调整使用。 ### 回答3: grep命令Linux系统中非常常用的文本搜索工具,它能够基于给定的模式搜索指定文件中的内容。下面是grep命令使用方法。 基本语法:grep [选项] [模式] [文件] 选项: - -i,忽略大小写 - -v,反向匹配,显示不匹配的内容 - -r,递归搜索子目录中的文件 - -l,只显示包含匹配内容的文件名 - -n,显示匹配内容所在行的行号 - -c,显示匹配的行数 - -w,匹配整个单词而不是部分匹配 - -A <num>,显示匹配内容后的 <num> 行 - -B <num>,显示匹配内容前的 <num> 行 - -C <num>,显示匹配内容前后的 <num> 行 模式: 在grep命令中,可以使用多种不同的模式,模式可以是一个普通字符串、正则表达式或者文件。 示例: 1. 在文件 file.txt 中搜索关键词 "hello",并显示匹配的行: ``` grep "hello" file.txt ``` 2. 在文件夹 /tmp 中递归搜索包含关键词 "world" 的文件,并显示匹配的文件名: ``` grep -r -l "world" /tmp ``` 3. 在文件 file.txt 中搜索以字母 "a" 开头的单词,并显示匹配的行及行号: ``` grep -i -n "\<a\w*" file.txt ``` 总结:grep命令是一种功能强大的文本搜索工具,可以根据给定的模式在指定文件中搜索内容。通过掌握grep命令的基本语法和常用选项,可以快速准确地搜索和过滤文件中的内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值