Linux-文本处理工具grep

Linux-文本处理工具sed
Linux-文本处理工具awk
Linux-文本处理工具grep
Linux-文本处理工具cut
Linux-正则表达式RE

文章目录

文本处理

grep

grep家族

grep: 在文件中全局查找指定的正则表达式,并打印所有包含该表达式的行
egrep: 扩展的egrep,支持更多的正则表达式元字符
fgrep: 固定grep(fixed grep),有时也被称作快速(fast grep),它按字面解释所有的字符
fgrep 就是不进行转意,你给我什么样就是什么样

一、grep命令格式

grep [选项] PATTERN filename filename ...
# grep 'Tom' /etc/passwd
# grep 'bash shell' /etc/test	

找到: grep返回的退出状态为0
没找到: grep返回的退出状态为1
找不到指定文件: grep返回的退出状态为2

grep 程序的输入可以来自标准输入或管道,而不仅仅是文件,例如:

# grep 'tom'
# ps aux |grep 'sshd'
# ll |grep '^d'
# grep 'alice' /etc/passwd /etc/shadow /etc/group                过滤Alice在这三个文件路径里

二、grep使用的元字符

grep: 使用基本元字符集 ^, $, ., *, [], [^], < >,(),{}, +, |
egrep(或grep -E): 使用扩展元字符集 ?, +, { }, |, ( )
注:grep也可以使用扩展集中的元字符,仅需要对这些元字符前置一个反斜线

\w 所有字母与数字,称为字符[a-zA-Z0-9] ‘l[a-zA-Z0-9]ve’ 'l\wve’
\W 所有字母与数字之外的字符,称为非字符 ‘love[^a-zA-Z0-9]+’ ‘love\W+’
\b 词边界 ‘<love>’ ‘\blove\b’

三、grep 示例
grep -E 或 egrep

# egrep 'NW' datafile	
# egrep 'NW' d*		
# egrep '^n' datafile
# egrep '4$' datafile                               以4 结尾的
# egrep TB Savage datafile   
# egrep 'TB Savage' datafile                   要用引号 引起来 要不系统会认为是文件路径
# egrep '5\..' datafile	
# egrep '\.5' datafile		
# egrep '^[we]' datafile
# egrep '[^0-9]' datafile	
# egrep '[A-Z][A-Z] [A-Z]' datafile
# egrep 'ss* ' datafile		
# egrep '[a-z]{9}' datafile                       a-z 的任意9个字母
# egrep '\<north' datafile
# egrep '\<north\>' datafile	
# egrep '\<[a-r].*n\>' datafile
# egrep '^n\w*\W' datafile	
# egrep '\bnorth\b' datafile

# egrep 'NW|EA' datafile
# egrep '3+' datafile                              一个或者多个 3 字符
# egrep '2\.?[0-9]' datafile	
# egrep '(no)+' datafile                          一个或者多个 no 字符
# egrep 'S(h|u)' datafile                          过滤 sh 或者 su
# egrep 'Sh|u' datafile                        

三、grep选项

-i , --ignore-case 忽略大小写

-l, --files-with-matches 只列出匹配行所在的文件名

-n, --line-number 在每一行前面加上它在文件中的相对行号

-c, --count 显示成功匹配的行数

-s, --no-messages 禁止显示文件不存在或文件不可读的错误信息

-q, --quiet, --silent 静默–quiet, --silent

-v, --invert-match 反向查找,只显示不匹配的行

-R, -r, --recursive 递归针对目录

–color 颜色

-o, --only-matching 只显示匹配的内容

-B, --before-context=NUM print NUM lines of leading context before 之前的三行

-A, --after-context=NUM print NUM lines of trailing context after 之后的三行

-C, --context=NUM print NUM lines of output context 上下(前后)三行

匹配ip 只显示匹配的内容而已
[root@tianyun ~]# egrep ‘^IPADDR’ /etc/sysconfig/network-scripts/ifcfg-eth0 |egrep -o ‘[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}’
192.168.2.254 匹配1-9里的三个数字
[root@tianyun ~]# egrep ‘^IPADDR’ /etc/sysconfig/network-scripts/ifcfg-eth0 |egrep -o ‘([0-9]{1,3}.){3}[0-9]{1,3}’
192.168.2.254

[root@tianyun ~]# grep --help |grep ‘-R’
-R, -r, --recursive equivalent to --directories=recurse

[root@tianyun ~]# grep --help |egrep -A5 ‘-R’
-R, -r, --recursive equivalent to --directories=recurse
–include=FILE_PATTERN search only files that match FILE_PATTERN
–exclude=FILE_PATTERN skip files and directories matching FILE_PATTERN
–exclude-from=FILE skip files matching any file pattern from FILE
–exclude-dir=PATTERN directories that match PATTERN will be skipped.
-L, --files-without-match print only names of FILEs containing no match

判断输入的是否是合法的IP的地址
识别手机号,邮箱,
grep一个文件中匹配手机号码:

cat grep.sh | grep -E "^1[3|4|5|8][0-9]{9}$"
grep从一个文件中匹配出座机号码:
这个座机号码是从2开头的座机号码:三段:第一和第二段是三个数,第三段是四个数)
grep -E -n '^\(?[2-9][0-9]{2}\)?(| |-|\.)[0-9]{3}( |-|\.)[0-9]{4}$' grep.sh

grep从一个文件中匹配邮箱:
grep -E "^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$" grep.sh

这是匹配出所有类似邮箱的字符:
grep -E "^\w+(\W\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$" grep.sh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值