你知道可以使用grep来查找所有包含指定文本的文件

目标:本文提供一些关于如何搜索出指定目录或整个文件系统中那些包含指定单词或     字符   串的文件。

 你知道可以使用grep来查找所有包含指定文本的文件_设计制作_RF/无线

难度:容易

约定:

# - 需要使用 root 权限来执行指定命令,可以直接使用 root 用户来执行也可以使用 sudo 命令

$ - 可以使用普通用户来执行指定命令

案例

非递归搜索包含指定字符串的文件

第一个例子让我们来搜索 /etc/ 目录下所有包含 stretch 字符串的文件,但不去搜索其中的子目录:

# grep -s stretch /etc/*/etc/os-release:PRETTY_NAME=“Debian GNU/     Linux   9 (stretch)”/etc/os-release:VE     RS   ION=“9 (stretch)”

grep 的 -s 选项会在发现不存在或者不能读取的文件时隐藏报错信息。结果显示除了文件名之外,还有包含请求字符串的行也被一起输出了。

递归地搜索包含指定字符串的文件

上面案例中忽略了所有的子目录。所谓递归搜索就是指同时搜索所有的子目录。

下面的命令会在 /etc/ 及其子目录中搜索包含 stretch 字符串的文件:

# grep -R stretch /etc/*/etc/apt/sources.list:# deb cd     rom   :[Debian GNU/Linux     te   s     ti   ng _Stretch_ - Official Snapshot     amd   64 NE  TI NST Binary-1 20170109-05:56]/ stretch m     ai   n/etc/apt/sources.list:#deb cdrom:[Debian GNU/Linux tes  TI ng _Stretch_ - Official Snapshot amd64 NE  TI NST Binary-1 20170109-05:56]/ stretch main/etc/apt/sources.list:deb http://ftp.au.debian.org/debian/ stretch main/etc/apt/sources.list:deb-src http://ftp.au.debian.org/debian/ stretch main/etc/apt/sources.list:deb http://security.debian.org/debian-security stretch/updates main/etc/apt/sources.list:deb-src http://security.debian.org/debian-security stretch/updates main/etc/dic  TI onaries-common/words:backstretch/etc/dictionaries-common/words:backstretch‘s/etc/dictionaries-common/words:backstretches/etc/dictionaries-common/words:homestretch/etc/dictionaries-common/words:homestretch’s/etc/dictionaries-common/words:homestretches/etc/dictionaries-common/words:outstretch/etc/dictionaries-common/words:outstretched/etc/dictionaries-common/words:outstretches/etc/dictionaries-common/words:outstretching/etc/dictionaries-common/words:stretch/etc/dictionaries-common/words:stretch‘s/etc/dictionaries-common/words:stretched/etc/dictionaries-common/words:stretcher/etc/dictionaries-common/words:stretcher’s/etc/dictionaries-common/words:stretchers/etc/dictionaries-common/words:stretches/etc/dictionaries-common/words:stretchier/etc/dictionaries-common/words:stretchiest/etc/dictionaries-common/words:stretching/etc/dictionaries-common/words:stretchy/etc/grub.d/00_header:background_image -m stretch `make_system_path_relative_to_its_root “$GRUB_BACKGROUND”`/etc/os-release:PRETTY_NAME=“Debian GNU/Linux 9 (stretch)”/etc/os-release:VERSION=“9 (stretch)”

搜索所有包含特定单词的文件

上面 grep 命令的案例中列出的是所有包含字符串 stretch 的文件。也就是说包含 stretches , stretched 等内容的行也会被显示。 使用 grep 的 -w 选项会只显示包含特定单词的行:

# grep -Rw stretch /etc/*/etc/apt/sources.list:# deb cdrom:[Debian GNU/Linux testing _Stretch_ - Official Snapshot amd64 NETINST Binary-1 20170109-05:56]/ stretch main/etc/apt/sources.list:#deb cdrom:[Debian GNU/Linux testing _Stretch_ - Official Snapshot amd64 NETINST Binary-1 20170109-05:56]/ stretch main/etc/apt/sources.list:deb http://ftp.au.debian.org/debian/ stretch main/etc/apt/sources.list:deb-src http://ftp.au.debian.org/debian/ stretch main/etc/apt/sources.list:deb http://security.debian.org/debian-security stretch/updates main/etc/apt/sources.list:deb-src http://security.debian.org/debian-security stretch/updates main/etc/dictionaries-common/words:stretch/etc/dictionaries-common/words:stretch‘s/etc/grub.d/00_header:background_image -m stretch `make_system_path_relative_to_its_root “$GRUB_BACKGROUND”`/etc/os-release:PRETTY_NAME=“Debian GNU/Linux 9 (stretch)”/etc/os-release:VERSION=“9 (stretch)”

显示包含特定文本的文件名

上面的命令都会产生多余的输出。下一个案例则会递归地搜索 etc 目录中包含 stretch 的文件并只输出文件名:

# grep -Rl stretch /etc/*/etc/apt/sources.list/etc/dictionaries-common/words/etc/grub.d/00_header/etc/os-release

大小写不敏感的搜索

默认情况下搜索是大小写敏感的,也就是说当搜索字符串 stretch 时只会包含大小写一致内容的文件。

通过使用 grep 的 -i 选项,grep 命令还会列出所有包含 Stretch , STRETCH , StReTcH 等内容的文件,也就是说进行的是大小写不敏感的搜索。

# grep -Ril stretch /etc/*/etc/apt/sources.list/etc/dictionaries-common/default.hash/etc/dictionaries-common/words/etc/grub.d/00_header/etc/os-release

搜索时包含/排除指定文件

grep 命令也可以只在指定文件中进行搜索。比如,我们可以只在配置文件(扩展名为.conf)中搜索指定的文本/字符串。 下面这个例子就会在 /etc 目录中搜索带字符串 bash 且所有扩展名为 .conf 的文件:

# grep -Ril bash /etc/*.confOR# grep -Ril --include=\*.conf bash /etc/*/etc/adduser.conf

类似的,也可以使用 --exclude 来排除特定的文件:

# grep -Ril --exclude=\*.conf bash /etc/*/etc/alternatives/view/etc/alternatives/vim/etc/alternatives/vi/etc/alternatives/vimdiff/etc/alternatives/rvim/etc/alternatives/ex/etc/alternatives/rview/etc/bash.bashrc/etc/bash_completion.d/grub/etc/cron.daily/apt-compat/etc/cron.daily/exim4-base/etc/dictionaries-common/default.hash/etc/dictionaries-common/words/etc/inputrc/etc/passwd/etc/passwd-/etc/profile/etc/shells/etc/skel/.profile/etc/skel/.bashrc/etc/skel/.bash_logout

搜索时排除指定目录

跟文件一样,grep 也能在搜索时排除指定目录。 使用 --exclude-dir 选项就行。

下面这个例子会搜索 /etc 目录中搜有包含字符串 stretch 的文件,但不包括 /etc/grub.d 目录下的文件:

# grep --exclude-dir=/etc/grub.d -Rwl stretch /etc/*/etc/apt/sources.list/etc/dictionaries-common/words/etc/os-release

显示包含搜索字符串的行号

-n 选项还会显示指定字符串所在行的行号:

# grep -Rni bash /etc/*.conf/etc/adduser.conf:6:DSHELL=/bin/bash

寻找不包含指定字符串的文件

最后这个例子使用 -v 来列出所有不包含指定字符串的文件。

例如下面命令会搜索 /etc 目录中不包含 stretch 的所有文件:

# grep -Rlv stretch /etc/*

82
76
0
5

相关资讯

  1. 1、爱国电影即将上映,王源王俊凯再度合作,两人剧中表演惊艳众人2006
  2. 2、皮克斯全新动画《夏日友晴天》曝中字预告画风明媚可爱3894
  3. 3、本周《猎冬》不仅要弄哭你,还有神秘角色要登场了!729
  4. 4、《斗破苍穹》药尘、萧玄、魂灭生都争着给萧炎送神功,主角光环!2384
  5. 5、春节档电影抢先看!周星驰,黄渤,沈腾,你为谁买电影票?4931
  6. 6、迪士尼并购福斯面临风险默多克或改变主意卖给出价更高的买家170
  7. 7、古装玄幻电影《嫦娥奔月》部分角色海报预先曝光1670
  8. 8、王传君炮轰《爱情公寓》,导演却大度回应:传君是难得的好演员1384
  9. 9、所有姐弟恋的作品中,这一部期待值最高,男女主角相差十九岁4889
  10. 10、李冰冰否认要到好莱坞发展,自认45岁太“超龄”4264
全部评论(0)
我也有话说
0
收藏
点赞
顶部