Linux grep 命令
Posted 天宇轩-王
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux grep 命令相关的知识,希望对你有一定的参考价值。
Linux grep 命令用于查找文件里符合条件的字符串。
grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
语法
grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
参数:
- -a 或 --text : 不要忽略二进制的数据。
- -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
- -b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
- -B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
- -c 或 --count : 计算符合样式的列数。
- -C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
- -d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
- -e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
- -E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
- -f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
- -F 或 --fixed-regexp : 将样式视为固定字符串的列表。
- -G 或 --basic-regexp : 将样式视为普通的表示法来使用。
- -h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
- -H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
- -i 或 --ignore-case : 忽略字符大小写的差别。
- -l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
- -L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
- -n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
- -o 或 --only-matching : 只显示匹配PATTERN 部分。
- -q 或 --quiet或--silent : 不显示任何信息。
- -r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
- -s 或 --no-messages : 不显示错误信息。
- -v 或 --revert-match : 显示不包含匹配文本的所有行。
- -V 或 --version : 显示版本信息。
- -w 或 --word-regexp : 只显示全字符合的列。
- -x --line-regexp : 只显示全列符合的列。
- -y : 此参数的效果和指定"-i"参数相同。
白话文概括常见的
OPTIONS: -i: 不区分大小写 -v: 查找不包含指定内容的行,反向选择 -w: 按单词搜索 -o: 打印匹配关键字 -c: 统计匹配到的行数 -n: 显示行号 -r: 逐层遍历目录查找 -A: 显示匹配行及后面多少行 -B: 显示匹配行及前面多少行 -C: 显示匹配行前后多少行 -l:只列出匹配的文件名 -L:列出不匹配的文件名 -e: 使用正则匹配 -E:使用扩展正则匹配 ^key:以关键字开头 key$:以关键字结尾 ^$:匹配空行 --color=auto :可以将找到的关键词部分加上颜色的显示
颜色显示(别名设置):
临时设置: # alias grep=‘grep --color=auto‘ //只针对当前终端和当前用户生效 永久设置: 1)全局(针对所有用户生效) vim /etc/bashrc alias grep=‘grep --color=auto‘ source /etc/bashrc 2)局部(针对具体的某个用户) vim ~/.bashrc alias grep=‘grep --color=auto‘ source ~/.bashrc
实例:
# grep -i root passwd 忽略大小写匹配包含root的行 # grep -w ftp passwd 精确匹配ftp单词 # grep -w hello passwd 精确匹配hello单词;自己添加包含hello的行到文件 # grep -wo ftp passwd 打印匹配到的关键字ftp # grep -n root passwd 打印匹配到root关键字的行好 # grep -ni root passwd 忽略大小写匹配统计包含关键字root的行 # grep -nic root passwd 忽略大小写匹配统计包含关键字root的行数 # grep -i ^root passwd 忽略大小写匹配以root开头的行 # grep bash$ passwd 匹配以bash结尾的行 # grep -n ^$ passwd 匹配空行并打印行号 # grep ^# /etc/vsftpd/vsftpd.conf 匹配以#号开头的行 # grep -v ^# /etc/vsftpd/vsftpd.conf 匹配不以#号开头的行 # grep -A 5 mail passwd 匹配包含mail关键字及其后5行 # grep -B 5 mail passwd 匹配包含mail关键字及其前5行 # grep -C 5 mail passwd 匹配包含mail关键字及其前后5行
[root@iZbp1efx14jd8471u20gpaZ tmp]# cp /etc/passwd . [root@iZbp1efx14jd8471u20gpaZ tmp]# ll total 8 srwxr-xr-x 1 root root 0 Feb 5 20:30 Aegis-<Guid(5A2C30A2-A87D-490A-9281-6765EDAD7CBA)> -rw-r--r-- 1 root root 956 Feb 5 21:03 passwd drwx------ 3 root root 4096 Feb 5 20:30 systemd-private-38985bf8993a45cc8f6c10b0d55ebf1c-chronyd.service-svMPKF [root@iZbp1efx14jd8471u20gpaZ tmp]# alias grep=‘grep --color=auto‘ [root@iZbp1efx14jd8471u20gpaZ tmp]# group root passwd -bash: group: command not found [root@iZbp1efx14jd8471u20gpaZ tmp]# grep root passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@iZbp1efx14jd8471u20gpaZ tmp]# grep -w ftp passwd ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin [root@iZbp1efx14jd8471u20gpaZ tmp]# grep -wo ftp passwd ftp ftp [root@iZbp1efx14jd8471u20gpaZ tmp]# grep -n root passwd 1:root:x:0:0:root:/root:/bin/bash 10:operator:x:11:0:operator:/root:/sbin/nologin [root@iZbp1efx14jd8471u20gpaZ tmp]# grep -nic root passwd 2 [root@iZbp1efx14jd8471u20gpaZ tmp]# grep -ni root passwd 1:root:x:0:0:root:/root:/bin/bash 10:operator:x:11:0:operator:/root:/sbin/nologin [root@iZbp1efx14jd8471u20gpaZ tmp]# grep -i ^root passwd root:x:0:0:root:/root:/bin/bash [root@iZbp1efx14jd8471u20gpaZ tmp]# grep bash$ passwd root:x:0:0:root:/root:/bin/bash [root@iZbp1efx14jd8471u20gpaZ tmp]# grep -n ^$ passwd [root@iZbp1efx14jd8471u20gpaZ tmp]# grep ^# /etc/vsftpd/vsftpd.conf grep: /etc/vsftpd/vsftpd.conf: No such file or directory [root@iZbp1efx14jd8471u20gpaZ tmp]# grep -A 5 mail passwd mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin [root@iZbp1efx14jd8471u20gpaZ tmp]# grep -B 5 mail passwd adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
以上是关于Linux grep 命令的主要内容,如果未能解决你的问题,请参考以下文章