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

Linux 文本处理三剑客之grep   egrep

2015-09-02 13:13 507 查看
Linux 文本处理三剑客之grep egrep
grep: Global search REgular expression andPrint out the line.
作用:文本搜索工具,根据用户指定的“模式(pattern)”逐行去搜索目标文本,打印匹配到的行.
模式:由正则表达式的元字符及文本字符所编写的过元字符,其中正则表达示分基本正则表达式,和扩展正则正则表达式2类
元字符不表示其字面意义,而用于表示通配或控制功能滤条件。元字符有下面一些
字符匹配:
.:匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[:alnum:]代表0-9 a-z A-Z发
[:alpha:]代表A-Z a-z
[:digit:] 代表0-9
[:lower:] 代表a-z
[:upper:]代表A-Z
[:space:] 任何会产生空白的字符,包括空格键[TAB]CR等
次数匹配:(用与基本正则)
*:任意次
\?:0次到1次
\+:1次到多次
\{m,n\}:至少m次,至多n次
\{m\}:精确匹配m次
\{0,n\}:至多n次
\{m,\}:至少m次
.*:任意长度的任意字符
位置锚定:
^:行首锚定,用在模式的最左侧
$:行尾锚定,用在模式的最右侧
\<,\b: 词首锚定
\> , \b:词尾锚定
^$:空白行
\(\):分组, 小括号中的模式匹配到的内容,并保留在内在的变量中,
\1:从左侧起,第一个左括号,以及与之配对的右括号中间的模式所匹配到的内容
\2: 从左侧起,第2个左括号,以及与之配对的右括号中间的模式所匹配到的内容

扩展正则有下面几个,用与支持egrep
.:任意单个字符
.*:匹配前一个字符0次到无穷次
[]:范围内单个字符
[^]:范围外单个字符
+: 1次到多次
?:0到1次
{m}:
{m,n}
|:相当与或(or)方式,比如gd|good,表示是gd 和good
( ):找出群组字符串
( ):分组,小括号中的模式匹配到的内容,并保留在内在的变量中,
\1:从左侧起,第一个左括号,以及与之配对的右括号中间的模式所匹配到的内容
\2: 从左侧起,第2个左括号,以及与之配对的右括号中间的模式所匹配到的内容
()+:多个群组的判断

我建议大家用alias 把grep egrep 写成别名。可以写入~/.bashrc这个文件中,在执行source ~/.bashrc 来立即生效.这样就会有颜色显示。
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
使用格式:grep [OPTIONS] PATTERN [FILE...]
OPTIONS 选项有--color=auto
-v:显示模式匹配不到行
-i:忽略大小写
-o:仅显示模式匹配的行
-q: 静默模式
-E:使用扩展正则式
-n:显示行号

作业练习:
3:显示/etc/passwd文件中以bash结尾的行
grep 'bash$'/etc/passwd




4:显示/etc/passwd文件中的两位数或三位数
egrep '\b[0-9]{2,3}\b'
/etc/passwd





5:显示`netstat -tan`命令结果中以‘LISTEN’后跟0个、1个或者多个空白字符结尾的行
netstat -ant | egrep 'LISTEN[[:space:]]*$'




6:添加用户bash、testbash、basher以及nologin用户(nologin用户的shell为/sbin/nologin);而后找出/etc/passwd文件中用户名与其shell名相同的行
egrep '^(\b[[:alnum:]]+\b).*\1$' /etc/passwd




7:显示当前系统上root、centos或者user1用户的默认shell和UID (请事先创建这些用户,若不存在)
egrep '^root|^centos|^user1'/etc/passwd | cut -d: -f3,7




8:找出/etc/rc.d/init.d/functions文件中某单词(单词中间可以存在下划线)后面跟着一组小括号的行
grep '\b[[:alpha:]_]\+\b()'/etc/rc.d/init.d/functions




9:找出ifconfig命令执行结果中1-255之间的数字
ifconfig | egrep --color '\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'




10:使用echo输出一个路径,而后egrep找出其路径基名;进一步的使用egrep取出其目录名
这个题 做不出来,就没写
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息