grep 换行符 grep 回车_字符串

[FILE …] 中可以指定多个文件

grep 换行符 grep 回车_grep 换行符_02

grep在每个文件中搜索PATTERNS。 PATTERNS是由换行符分隔的一个或多个模式(?),grep打印与该模式匹配的每一行。 通常,在shell命令中使用grep时,应将PATTERNS引起来。
文件“-”代表标准输入。
如果未提供FILE,则递归搜索将检查工作目录,而非递归搜索将读取标准输入。
此外,变体程序egrep,fgrep和rgrep分别与grep -E,grep -F和grep -r相同。 不建议使用这些变体,但提供这些变体是为了向后兼容。

在grep命令中输入字符串参数时,最好将其用双引号括起来。例如:”my string”。这样做有两个原因,一是以防被误解为 shell命令,二是可以用来查找多个单词组成的字符串,例如:”jet plane”,如果不用双引号将其括起来,那么单词 plane将被误认为是一个文件,查询结果将返回”文件不存在”的错误信息。
在调用变量时,也应该使用双引号,诸如: grep ”$MYVAR”文件名,如果不这样,将
没有返回结果。

Pattern Syntax

grep 换行符 grep 回车_grep 换行符_03

E参数将Patterns解析为extended regular expressions (EREs)
F参数将Patterns解析为普通字符串,而不是正则表达式
G参数将Patterns解析为basic regular expressions (BREs),这是默认的

P参数将Patterns解析为Perl-compatible regular expressions (PCREs)

grep 换行符 grep 回车_文件名_04


grep 换行符 grep 回车_语言环境_05


注意:!!!basic regular expressions (BREs)中‘?’, ‘+’, ‘{’, ‘|’, ‘(’, and ‘)’都没有特殊含义!

如下例子

grep 换行符 grep 回车_grep 换行符_06


注记:Pattern还是尽量使用双引号括起来,第一个有输出是因为shell语法先把?解析成了?,而第二个没有解析,第三个是推荐的写法

grep 换行符 grep 回车_字符串_07


不使用E参数,使用BREs的话,得往特殊字符前面添加\才能作为特殊字符使用!

grep 换行符 grep 回车_字符串_08


在默认的C语言环境中,[a-d]等效于[abcd]。 许多语言环境都按字典顺序对字符进行排序,在这些语言环境中,[a-d]通常不等同于[abcd]; 例如,它可能等效于[aBbCcDd]。 要获得括号表达式的传统解释,可以通过将LC_ALL环境变量设置为值C来使用C语言环境。

默认地表示字符集合方法如下

纯数字:[[:digit:]]或[0-9]

小写字母:[[:lower:]]或[a-z]

大写字母:[[:upper:]]或[A-Z]

大小写字母:[[:alpha:]]或[a-zA-Z]

数字加字母:[[:alnum:]]或[0-9a-zA-Z]

空白字符:[[:space:]]

标点符号:[[:punct:]]注意:!!!EREs和BREs都不支持\d,\s,\D,\S,\w,\W这种表示字符集合的方法!只支持上面讲的两种方法

grep 换行符 grep 回车_语言环境_09

大多数元字符在方括号表达式内都失去了特殊的含义。要包含 ] ,得把它放到[] 里面的第一个位置

如下例,使用x参数要求整行全部匹配,第二个命令没有输出

grep 换行符 grep 回车_文件名_10

Matching Control

grep 换行符 grep 回车_语言环境_11


e和f参数指定patterns的来源,f参数指定从FILE中读取PATTERNS

e参数存在的意义在于
要使用 -e 选项来搜索匹配 ‘–test–’ 字符串,如果不使用 -e 选项,grep 命令会试图把 ‘–test–’ 当作自己的选项参数来解析:
grep -e ‘–test–’ 文件名

grep 换行符 grep 回车_grep 换行符_12


默认是区分大小写来匹配的,使用i参数来忽略大小写

grep 换行符 grep 回车_语言环境_13


反向匹配,即匹配成功的那些不输出,输出没匹配的

grep 换行符 grep 回车_文件名_14


要求一整行全部匹配模式,可以在正则表达式中使用^和$来实现

General Output Control

grep 换行符 grep 回车_文件名_15


抑制正常输出,而是为每个输入文件打印匹配行数

grep 换行符 grep 回车_字符串_16


L参数抑制正常输出,而是打印那些文件内容没有匹配的文件名

l参数抑制正常输出,而是打印那些文件内容有匹配上的文件名

因此扫描文件时,在第一次匹配后就停止扫描该文件

grep 换行符 grep 回车_grep 换行符_17


在NUM条匹配的行之后停止读取该文件。

grep 换行符 grep 回车_语言环境_18


只打印匹配的那一部分内容,默认是打印匹配的那一行数据(这一行数据有部分内容匹配成功patterns,除非使用x参数,要求整行数据都匹配)

Output Line Prefix Control

grep 换行符 grep 回车_grep 换行符_19


n参数:在输出的每一行之前还输出行号(文件中行号从1开始)

grep 换行符 grep 回车_字符串_20


b参数:打印每行输出在文件中的byte-offset(文件中byte-offset从0开始)

grep 换行符 grep 回车_grep 换行符_21

H参数:每行输出都打印文件名(有多个输入文件时,这是默认的)
h参数:每行输出前不打印文件名(只有一个输入文件或者只有标准输入时这是默认的)

Context Line Control

grep 换行符 grep 回车_grep 换行符_22


在匹配的行之后打印NUM行尾随的上下文context。

在连续的匹配组之间放置包含组分隔符(-)的行。

使用-o或–only-matching选项,此选项无效,并且会给出警告。

grep 换行符 grep 回车_文件名_23


在匹配的行之后打印NUM行前面的上下文context。

grep 换行符 grep 回车_语言环境_24


在匹配的行之后打印NUM行上下文context。

File and Directory Selection

grep 换行符 grep 回车_字符串_25


把二进制文件当作text文件来处理

grep 换行符 grep 回车_文件名_26


输入文件是一个device,FIFO或者是socket时,使用ACTION来处理它

ACTION为read时,则直接当成普通文件读取,为skip时,则跳过

grep 换行符 grep 回车_grep 换行符_27


r和R参数都指定为递归读取文件夹里的文件,如果file参数没有指定的话,则在当前路径进行递归遍历

两者区别在于R是解引用递归(dereference recursive),对所有的软链接都会递归遍历进去,而r是只有当they are on the command line(什么意思?)时,才遍历软链接

grep 换行符 grep 回车_grep 换行符_28


–exclude=GLOB 跳过匹配GLOB的文件名,

BLOB中可以使用* ? […]作为通配符,可以使用\来引用它们的本义

–exclude-from=FILE 从FILE中读取BLOB,然后跳过匹配的文件

grep 换行符 grep 回车_语言环境_29


跟–exclude=GLOB相反,只处理匹配成功的那些文件

grep 换行符 grep 回车_grep 换行符_30


跳过匹配GLOB的文件夹