您的位置:首页 > 运维架构 > Linux

LINUX --grep 小论

2015-11-08 15:38 316 查看
LINUX --grep 这是一个非常重要的工具,sed,awk,grep被称为LINUX的3剑客!

grep :根据模式,搜素文本,并将符合模式的文本行显示。
举例子说语法:
例子1: #grep -i 'root' /etc/passwd #找出/etc/passwd这个文件中root或者ROOT的行,-i是 ignore,忽略的意思,忽略大小写。
------------------------------------------
例子2: #grep -v‘root' /etc/passwd #找出/etc/passwd这个文件中,处理有root的行不显示
出来,其余的行都显示出来,-v是invert,使反转

------------------------------------------
例子3: #grep -o 'root' /etc/passwd #找出/etc/passwd这个文件中,匹配的单词,不是行!

只是把root这个单词显示出来,你自己敲一遍就知道

这个单词的作用了。-o,是only,仅仅,只有!

-----------------------------------------
例子4: #grep --color 'root' /etc/passwd #找出/etc/passwd这个文件中root的行,同时用
颜色显示出来。--color ,颜色。

小技巧: #alias grep='grep --color' #有了这个别名以后,直接用grep,不用加--color,就会
直接用颜色显示出来,不过电脑重启,就会失效。

--------------------------------------------------------------------------------
例子5: #grep -A 'model' /proc/cpuinfo #意思是显示出model及其后面的2行,-A ,想after
--------------------------------------------------------------------------------
例子6: #grep -B 'model' /proc/cpuinfo #意思是显示出model及其前面的2行,-B,想before
------------------------------------------
一点小小的知识点:
正则表达式:(英文:REGular EXPression ----REGEXP)

* : 星号是任意长度的任意字符
?: 问号是任意的单个字符
[] : 中括号是匹配指定范围内的任意单个字符,比如:[0-9]就是0到9里面的某个数字
例子: #grep --color [0-9] /etc/inittab 0到9的数字都会显示出来了。自己敲,
看看效果。只有自己多敲,才明白。

--------------------------------------------------------------------------------
继续说:
[^] : 中括号里面加上一个尖尖的号,是匹配指定范围外的任意单个字符
例子: #grep --color [^0-9] /etc/inittab 你看一下效果,除了0-9的阿拉伯数字,
其他的字母都显示出来了。

---------------------------------------------------------------------------------
字符集合:[:alpha:] #意思是所有字母的集合
[:digit:] #意思是所有数字的集合
[:upper:] #意思是所有大写字母的集合
[:lower:] #意思是所有小写字母的集合
[:alnum:] #意思是所有字母和数字的集合
[:punct:] #意思是所有标点符号的集合
[:space:] #意思是所有空格的集合
例子: grep '[[:upper:]]' /etc/passwd #意思是列成/etc/passwd这个文件中所有的
大写字母。
------------------------------------------------------------------------
匹配次数:
* : 星号匹配其前面的字符任意次,任意次包括0次,也包括无数次。
.* : 点和星号,表示任意长度的任意字符!注意和单独的一个星号做比较。
-------------------------------------
? : 单独的一个问号,表示匹配前面的字符一次或者0次。
例子:grep 'a\?b' /etc/passwd #意思是把b,或者前面有1个a,然后有1个b的

单词显示出来。

--------------------------------------------------------------
\{m,n\} :匹配其前面的字符至少m次,最多n次。
例子: grep 'a\{1,3\}' /etc/passwd
\{1,\} #最少1次,最多无数次

\{0,3\} #最少0次,最多3次,0和3用逗号隔开

-------------------------------------
^ :托字符,表示此字符后面的内容必须出现在行首。
$ :美元字符,表示此字符前面的内容必须出现在行尾。
例子: # grep '^a' /etc/passwd 意思是列出a字母必须出现在开头的行
# grep ':$' /etc/passwd 意思是列出冒号必须出现在结尾的行
小技巧: ^$ :这个字符的结合表示空白行。
--------------------------------------
\b 或者 \< :意思是其后面的任意字符必须作为单词的首部出现。
\b 或者 \> :意思是其前面的任意字符必须作为单词的尾部出现。
把这个符号和^和$做比较,看看有什么不同。
比较:

#grep --color '\<root' /etc/passwd

#grep --color '^root' /etc/passwd

小提示: \<root\> 这就代表这一行就这1个单词,root!

---------------------------------------------------

分组:
\( \)
#grep '\(root\).* \1' /etc/passwd #命令中,\1的意思是再次引用前面括号中的内容,即root
比较: sed 's#\(root\)#\1R#g' /etc/passwd 比较一下不同,对sed和grep更好的理解。

----------------------------------------------------------------

可拓展的正则表达式:(extended regular expression)
什么叫可拓展,举个例子:
# grep -E '(root)' /etc/passwd

# grep '\(root\)' /etc/passwd
上面这2个命令都是把/etc/passwd这个文件中带有root的行显示出来,但是一个有反斜线,一个没有反斜线,这就是区别! -E 这个选项加上以后,就不用反斜线了。
#egrep '(root)' /etc/passwd #注意,egrep == grep -E, 一样的功能。

写的不好,请谅解!能对你起到一点点帮助,就算没白写。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux --grep