无论使用什么产品,照着使用指南进行一番操作是学习它最便捷快速的方法。使用指南都是给用户看的, 一般都是简单易懂,有示例。linux命令行也是一样。
linux 命令行的使用指南有两种方法查看, 一种是命令行后面添加 –help选项,查看最基础的使用概要。 另一种是使用man 命令查看详细的命令使用指南。第一种适合快捷查询,但是信息不够详细。 第二种,适合深入详细的查询,可以了解各个选项的意义。通过这两种方式基本上可以搞懂linux的命令使用,然后再结合网络上的一些博客、百科什么的示例,就基本可以掌握该linux命令了。对于不懂的概念,再深入扩展学习一下,再加上日积月累的使用,对该linux命令就可以更加熟练、信手拈来了。这个方法也是我学习的主要套路。不知道大家是否也一样?。
不唠叨了。今年还有一个todo是掌握linux命令三剑客grep/awk/sed,下面整理一下比较简单的grep命令使用(基本上就是手册的翻译及使用举例)。
grep
用于文件内容的模式匹配搜索
使用概要
1 2 3 4 5
| grep [-abcdDEFGHhIiJLlmnOopqRSsUVvwxZ] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color[=when]] [--colour[=when]] [--context[=num]] [--label] [--line-buffered] [--null] [pattern] [file ...]
|
grep会搜索给定的文件,获取符号指定匹配模式(pattern)的行并输出。默认的,pattern只会一行行的进行匹配,不包含结尾的换行。空的pattern则匹配每一行。
grep用来作简单的模式匹配和基础的正则表达式匹配。 egrep可以处理扩展的正则表达式。fgrep处理的效率比grep和egrep更好,但是只能处理固定的pattern。pattern可以包含多行。
zgrep, zegrep和zfgrep的功能和grep、egrep、fgrep的功能一样,但是处理之前会对文件进行解压, 也就是用来处理压缩文件的版本。
命令选项:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
| -A num, 显示匹配行之后的num行
-a, --text 把所有文件当作ASCII文本处理。
-B num, 显示匹配行之前的num行
-b , 显示匹配pattern的行首在文件的偏移
-C 包含-A, -B的功能
-c num 输出前面num行的匹配结果
--colour=when 高亮匹配pattern的字符串, 可以为never, always 和 auto
-D action , --devices=action 指定处理设备、FIFOs和sockets的动作。默认动作是`read`,当作普通文件进行匹配, 可以设置成`skip`,不作匹配
-d action, --direcotries=action, 指定处理目录的动作, 默认动作是`read`, 当作普通文件进行匹配。可以设置成`skip`, 递归地进入处理,同`-R`/`-r`
-E 指定扩展正则表达式, 作用同egrep
-e pattern, --regexp=pattern 指定一个正则表达式, 一般使用-e来指定多个正则表达式, 只要匹配到任一正则表达式就会选中该行输出
--exclude 如果指定了,那么符合给定pattern的文件名的文件将不会被查找。--exclude的优先级高于--include的优先级。pattern匹配的是全路径,不仅仅是文件名。 grep -i -e '^Hello*' -e '^aa' -b --color --exclude hello.* *.md grep keep$ grep -i -e '^Hello*' -e '^aa' -b --color --exclude hello.* ./* -R
--exclude-dir 如果指定了-R选项,那么就不会查找符合给定pattern的目录。--exclude-dir的优先级高于--include-dir
-F, --fixed-strings 给定的pattern当作一个固定的字符串, 作用同fgrep
-f file, --file=file 从file文件中读取多行的pattern。如果文件内容为空,将不匹配任何东西 grep -i -f pattern -b --color --exclude '*.md' -R './' --exclude-dir '2'
-G, --basic-regexp 给定的pattern当作基础的正则表达式。
-H 输出结果时,前面显示文件名
-h, --no-filename 输出结果时,前面不显示文件名
--help 显示帮助
-I 忽略二进制文件, 就是不对二进制文件匹配处理
-i, --ignore-case 对pattern忽略大小写
--include 只有符合给定pattern的文件名的文件才进行搜索。pattern针对的是全路径,而不仅仅是文件名. grep -i -f pattern -b --color --include '*.md' ~/Documents/code/GitHub/blog_code/grep/* -R
--include-dir 如果设置了`-R`,只有目录符合给定pattern的文件名的文件才进行搜索。
-J, --bz2decompress 解压缩bzip2的文件再进行搜索
-L, --files-without-match 只显示文件内容不符合pattern的, 文件名符合-L值的文件的文件名 grep -i 'hello' -L *.md ./ -r
-l, --files-with-matches 只显示文件内容符合pattern的,文件名符合-l值的文件的文件名
--mmap 使用mmap而不是read来读取输入的内容。可以获取更好的性能, 但有时候行为不确定。
-m num, --max-count=num 获取num个结果后,不再读取文件
-n, --line-number 输出结果显示行号
--null Prints a zero-byte after the file name.
-O 如果给定了-R选项, 而且命令行显式的写出了符号链接, 则进行处理, 否则跳过。 就不处理符号连接的内容
-o 只显示匹配patter的部分。
-p 如果给定了-R选项,默认不处理符号连接
-q, --quiet, --silent 静默搜索,直到搜索到一个匹配的项,不会输出。 可以用在shell中, 仅仅判断有没有找到内容。
-R, -r, --recursive 递归的查找子目录
-S 如果指定了-R选项,所有符号连接都处理
-s, --no-messages Silent mode . 不存在或者不可读的文件 信息不会被显示 grep -i 'hello' -n --mmap --null *.json -s
-U, --binary 搜索二进制文件,但是不打印结果
-V, --version 显示grep的版本信息
-v, --invert-match 显示不匹配pattern的行
-w, --word-regexp pattern被当做一个word来匹配查询
-x, --line-regexp 只有输入行全部匹配字符串或者regular expression才算匹配上
-y, 同-i 废弃了
-Z, -z, --decompress 先解压,动作同 zgrep
--binary-files=value value为binary, 则默认搜索二进制文件,但是不输出。value为without-match,则不处理二进制文件, value为text , 二进制文件当做text文件进行查找 输出
--context=num 输出匹配行的前后num行内容, 和 -C 一样, 默认值为2
--line-buffered 强制输出为line buffered, 默认标准输出为terminal时,使用line-buffered, 其他使用block buffered
如果没有指定输入文件, 则输入为标准输入。
|
环境变量
GREP_OPTIONS 变量可以设置默认的选项
1 2 3 4 5 6 7 8 9 10 11 12
| export GREP_OPTIONS='-i -n -H'
Keep:grep keep$ grep 'hello' hello.md hello.md:3:啊啊啊 Hello, World!! hello.md:5:hello world hello.md:7:helloool man. hello.md:9:boy helloM hello.md:15:heLLO+ Keep:grep keep$
|
命令退出值
grep命令执行完后,会根据不同情况返回不同的值。
0 有匹配的行
1 没有任何行匹配
>1 命令执行错误
示例
1 2 3 4 5 6 7 8 9 10
| grep 'patricia' file_name
grep '^\.Pp' file_name // 查找以.Pp开头的行
grep -v -e 'foo' -e 'bar' filename // 查找没有foo和bar的行 -v
egrep '19|20|25' file_name // 在文件中查找 19, 20, 25
grep -E '[0-9]\{1,3\}' sed.md --color
|
标准
grep符合 IEEE Std 1003.1-2008 标准。
HISTORY
The grep command first appeared in Version 6 AT&T UNIX.
行动,才不会被动!
欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。