
grep 的语句是 grep 表达式file
用管道的话,就是file放前面了,也就是cat file | grep 表达式
双引号,单引号没有区别。都是表达式而已。 grep的强大的地方是跟正则表达式结合起来搜索。
个人理解,举例子,过滤关键字'DEVICE=ens33',过滤位置/etc/* ,就是在/etc/目录下过滤出关键字'DEVICE=ens33'的行
# read 读取[root@localhost ~ ] # grep -d read 'DEVICE-ens33' /etc/*
会发现得到很多:grep: /etc/xxx: Is a directory,我给的范围是/etc/*,grep过滤字符时肯定要打开文件读取到数据吧,而我给的路径有的目录,目录怎么读取,所以读目录的时候会报错,那么我认为read是默认的模式,并且不会过滤子目录内的文件!
# recurse 递归[root@localhost ~ ] # grep -d recurse 'DEVICE=ens33' /etc/*
得到结果:/etc/sysconfig/network-scripts/ifcfg-ens33:DEVICE=ens33发现,过滤的路径不再是/etc/xxx,而是将/etc/所有的目录包括子目录都在过滤范围内了,而没有提示xxx Is a directory,可能是读取子目录时发现是目录,就进到子目录在进行过滤 [0_0]异想天开,反正,这不就是递归了嘛。
# skip 跳过[root@localhost ~ ] # grep -d skip 'DEVICE=ens33' /etc/*
# 发现什么都没有,而我使用
[root@localhost ~ ] # grep -d skip '/root:/bin/bash' /etc/*
# 结果如下
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd-:root:x:0:0:root:/root:/bin/bash
发现了当我使用skip这个选项,只有/etc/xxx这级目录能被过滤出来,发现它并没有递归了,并且没有提示xxx Is a directory。从字面意思上看,skip,貌似是目录的话就跳过了。。。
常规情况下grep命令是在/usr/bin目录下,你可以使用which grep 或者where's grep 查找到这个执行命令的所在地。你这个是丢失了grep命令,你可以先把已经有的frep卸载了,然后重新装一次应该就可以了,yum remove grep -y。
如果安装没有问题,你就可以正常使用了。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)