在linux系统下,当在大量文件中使用grep命令来查找匹配行,有时需要只显示匹配行所在文件的文件名。
如何才能只显示匹配行所在文件的文件名?这里举个例子,大家研究下。
grep命令查找:
[root@devops ~]# grep user1 /etc/*
/etc/group:user1:x:501:
/etc/group:user1add:x:503:
/etc/group-:user1:x:501:
/etc/group-:user1add:x:503:
/etc/gshadow:user1:!::
/etc/gshadow:user1add:!::
/etc/gshadow-:user1:!::
/etc/gshadow-:user1add:!::
/etc/passwd:user1:x:501:501::/home/user1:/bin/bash
/etc/passwd:user1add:x:503:503::/home/user1add:/bin/bash
/etc/passwd-:user1:x:501:501::/home/user1:/bin/bash
/etc/passwd-:user1add:x:503:503::/home/user1add:/bin/bash
/etc/shadow:user1:!!:16176:0:99999:7:::
/etc/shadow:user1add:!!:16176:0:99999:7:::
/etc/shadow-:user1:!!:16176:0:99999:7:::
/etc/shadow-:user1add:!!:16176:0:99999:7:::
第一个字段是文件名,在grep命令中可以使用-l选项来控制grep命令的输出,只显示匹配行的文件名。
[root@devops ~]# grep -l user1 /etc/*
/etc/group
/etc/group-
/etc/gshadow
/etc/gshadow-
/etc/passwd
/etc/passwd-
/etc/shadow
/etc/shadow-
显示不匹配行所在文件的文件名,可以使用-L选项:
[root@devops ~]# grep -l user1 /etc/*
/etc/group
/etc/group-
/etc/gshadow
/etc/gshadow-
/etc/passwd
/etc/passwd-
/etc/shadow
/etc/shadow-
0