【Linux】三剑客命令之grep命令的常见用法
Linux三剑客指的是grep
、sed
、awk
这三个命令。其中grep
命令的详细用法有很多,但这里只介绍了常见用法,本文最后也贴了该命令的帮助文档以供查阅。
grep
可用于查找文件里符合条件的字符串
[root@localhost ~]# cat hello.txt
Hello world!
Hello world!
Hello world!
Hello world!
Hello world!
Hello world!
abc
123
5hr
[root@localhost ~]# grep abc hello.txt
abc
grep
也可以根据正则表达式查找字符串
其中正则表达式
^[0-9]*$
表示匹配数字。
[root@localhost ~]# grep ^[0-9]*$ hello.txt
123
- 查询时忽略大小写(
-i
参数)
[root@localhost ~]# grep ABC hello.txt
[root@localhost ~]# grep -i ABC hello.txt
abc
- 查询时显示所查询内容的行号(
-n
参数)
[root@localhost ~]# grep -i ABC -n hello.txt
7:abc
grep
过滤输出
grep命令也经常与其他命令通过管道连接,以起到过滤输出的作用,例如之前博客里所提到的过滤进程输出,因为一个系统中正在运行的进程是非常多的,如果想要找到你需要查看的进程仅通过肉眼扫描是非常麻烦的,如下述代码所示
ps -ef
表示输出所有进程信息,grep python
表示过滤出其中含python
字符串的部分,将两个代码通过管道符|
连接,起到 将前一个命令的输出信息输入到下一个命令的作用。
其中root 10570 6979 0 19:52 pts/1 00:00:00 grep --color=auto python
这一行信息表示的是grep
这个命令本身的进程信息。也可以通过-v
参数再过滤一次输出,如:ps -ef | grep java | grep -v grep
[root@localhost /]# ps -ef | grep python
root 775 1 0 11:01 ? 00:00:00 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
root 804 1 0 11:01 ? 00:00:02 /usr/bin/python -Es /usr/sbin/tuned -l -P
root 10570 6979 0 19:52 pts/1 00:00:00 grep --color=auto python
最后,我贴一下grep
命令的帮助文档:
我上面举例的都是常用的参数和基本用法,如果需要更多用法请浏览下面的帮助文档,例如
-H
可以在输出时也显示查询文档的名称。
[root@localhost ~]# grep --help
Usage: grep [OPTION]... PATTERN [FILE]...
Search for PATTERN in each FILE or standard input.
PATTERN is, by default, a basic regular expression (BRE).
Example: grep -i 'hello world' menu.h main.c
Regexp selection and interpretation:
-E, --extended-regexp PATTERN is an extended regular expression (ERE)
-F, --fixed-strings PATTERN is a set of newline-separated fixed strings
-G, --basic-regexp PATTERN is a basic regular expression (BRE)
-P, --perl-regexp PATTERN is a Perl regular expression
-e, --regexp=PATTERN use PATTERN for matching
-f, --file=FILE obtain PATTERN from FILE
-i, --ignore-case ignore case distinctions
-w, --word-regexp force PATTERN to match only whole words
-x, --line-regexp force PATTERN to match only whole lines
-z, --null-data a data line ends in 0 byte, not newline
Miscellaneous:
-s, --no-messages suppress error messages
-v, --invert-match select non-matching lines
-V, --version print version information and exit
--help display this help and exit
--mmap deprecated no-op; evokes a warning
Output control:
-m, --max-count=NUM stop after NUM matches
-b, --byte-offset print the byte offset with output lines
-n, --line-number print line number with output lines
--line-buffered flush output on every line
-H, --with-filename print the file name for each match
-h, --no-filename suppress the file name prefix on output
--label=LABEL use LABEL as the standard input file name prefix
-o, --only-matching show only the part of a line matching PATTERN
-q, --quiet, --silent suppress all normal output
--binary-files=TYPE assume that binary files are TYPE;
TYPE is 'binary', 'text', or 'without-match'
-a, --text equivalent to --binary-files=text
-I equivalent to --binary-files=without-match
-d, --directories=ACTION how to handle directories;
ACTION is 'read', 'recurse', or 'skip'
-D, --devices=ACTION how to handle devices, FIFOs and sockets;
ACTION is 'read' or 'skip'
-r, --recursive like --directories=recurse
-R, --dereference-recursive
likewise, but follow all symlinks
--include=FILE_PATTERN
search only files that match FILE_PATTERN
--exclude=FILE_PATTERN
skip files and directories matching FILE_PATTERN
--exclude-from=FILE skip files matching any file pattern from FILE
--exclude-dir=PATTERN directories that match PATTERN will be skipped.
-L, --files-without-match print only names of FILEs containing no match
-l, --files-with-matches print only names of FILEs containing matches
-c, --count print only a count of matching lines per FILE
-T, --initial-tab make tabs line up (if needed)
-Z, --null print 0 byte after FILE name
Context control:
-B, --before-context=NUM print NUM lines of leading context
-A, --after-context=NUM print NUM lines of trailing context
-C, --context=NUM print NUM lines of output context
-NUM same as --context=NUM
--group-separator=SEP use SEP as a group separator
--no-group-separator use empty string as a group separator
--color[=WHEN],
--colour[=WHEN] use markers to highlight the matching strings;
WHEN is 'always', 'never', or 'auto'
-U, --binary do not strip CR characters at EOL (MSDOS/Windows)
-u, --unix-byte-offsets report offsets as if CRs were not there
(MSDOS/Windows)
'egrep' means 'grep -E'. 'fgrep' means 'grep -F'.
Direct invocation as either 'egrep' or 'fgrep' is deprecated.
When FILE is -, read standard input. With no FILE, read . if a command-line
-r is given, - otherwise. If fewer than two FILEs are given, assume -h.
Exit status is 0 if any line is selected, 1 otherwise;
if any error occurs and -q is not given, the exit status is 2.
Report bugs to: bug-grep@gnu.org
GNU Grep home page: <http://www.gnu.org/software/grep/>
General help using GNU software: <http://www.gnu.org/gethelp/>