共计 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 仓库)