linux grep命令使用的一些心得

1、操作环境说明

这里提到的主要是在bash的suse11环境下的grep命令,以避免因系统环境的不同而导致命令执行后导致与描述的不同。

2、grep的定义和用法

grep是根据指定条件,逐行进行匹配,并将匹配内容的行显示出来的类unix工具,说白了就是用来过滤内容的,将符合过滤条件的内容,按照过滤一行显示一行的方式输出到设备上。

用法:

grep [options] PATTERN file1 …

options:常用参数,参数如下

-v   对结果取反

-i: 忽略字母大小写

-o:仅显示匹配到的字符串

-E :支持扩展正则表达式

-A n:往下多显示n

--color:不同的颜色显示被匹配的内容


PATTERN:配置模式,通常使用正则表达式


3、shell中使用的正则表达式的分类

正则通常分为下面两类

                basic regexp;基本正则表达式 grep默认只支持这个

                extended regexp 扩展正则表达式,egrep支持,grep需要加参数-E来支持


基本正则基础:


.:匹配任意单个字符 例子:

                    r..t 匹配rt之间的任意两个字符的单词,如rootrcctrdct

[]:指定范围内的任意单个字符,例子:

        如[abc],匹配abc

[^]:指定范围内相反的任意单个字符,例子:

        如[^ab],匹配ab之外的单个字符

[:upper:]表示所有大写字母,与[A-Z]一致

[:lower:]表示所有小写字母,与[a-z]一致

[:digit:]所有数字,与[0-9]一致

[:alpha:]所有字母,与[a-zA-Z]一致

[:alnum:]包含数字和字母,与[0-9a-zA-Z]一致

[:space:]所有空白字符,包括空格和tab

[:punct:]所有标点符号

正常使用为[[:upper:]],而这类取反,则[^[:upper:]],表示非大写字母。

*:匹配其前面的字符任意次,包括0次的哦。例子: 

        如ab*c,匹配abbcabcabbbbcacaccb任意次包括0


.*:匹配任意长度的任意字符,贪婪模式,即能匹配多长就匹配多长,最长为一行

X\{m,n\}:表示X至少出现m次,至多出现n次,比如X\{m,\}X\{0,n\} 

:匹配次数的符号,匹配前面的字符0次或1

锚定符

^:表示行首匹配,不出现在[]内。例子:

                  ^r..t:匹配出现在行首的r后跟任意两个字符,再加t

$:锚定行尾,例子

                 ^$:锚定空白行

\<:锚定词首 也可以写成\b

                 \<r..t :匹配r出现词首的字符串(出现非字母则该单词结束)

\>:锚定词尾 也可以写成\b,然后出现的位置不同。

                 r..t\>

 \(\):先对字符分组,然后通过\1,\2来引用第1分组,第2分组等等


4、基本例子


linux1:~ # grep "r[a-z]*t" /etc/passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:Printing daemon:/var/spool/lpd:/bin/bash

上面结果与下面命令结果一致:
 grep "r[[:lower:]]*t" /etc/passwd


文件1内容如下

He love his lover

She like her liker

找出文件内容中使用单词和该单词+r的单词

linux1:/home/test # grep "\(l..e\).*\1r" 1
He love his lover.
She like her liker.

5、扩展正则表达式

基本的元字符中\(\)改为()用于分组

基本的元字符中\{\}改为{}

+:次数匹配,匹配其前的字符至少一次

a|b:或者,表示ab都行


你可能感兴趣的:(linux,grep,使用方法,基础命令)