关于grep:学完14个实例掌握-grep-命令的使用方法

19次阅读

共计 2787 个字符,预计需要花费 7 分钟才能阅读完成。

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

命令语法

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

命令选项:

(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

(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

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

打印空行的行号

$ 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

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

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

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

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

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

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

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

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

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

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

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

小编开源我的项目

  • course-tencent-cloud(酷瓜云课堂 – gitee 仓库)
  • course-tencent-cloud(酷瓜云课堂 – github 仓库)

正文完
 0