ホームページ  >  記事  >  システムチュートリアル  >  grep を使用して、指定したテキストを含むすべてのファイルを検索します

grep を使用して、指定したテキストを含むすべてのファイルを検索します

PHPz
PHPz転載
2024-03-08 09:31:12349ブラウズ

使用 grep 查找所有包含指定文本的文件

目的: この記事では、指定したディレクトリまたはファイル システム全体で、指定した単語や文字列を含むファイルを検索する方法について説明します。

難易度: 簡単

######約束:######

# - 指定されたコマンドを実行するには、root 権限を使用する必要があります。root ユーザーを直接使用して実行することも、
    sudo
  • コマンドを使用することもできます。 #$ - 一般ユーザーを使用して指定されたコマンドを実行できます
  • ######場合######
  • 指定された文字列を含むファイルの非再帰検索
最初の例では、/etc/
ディレクトリ内の
stretch 文字列を含むすべてのファイルを検索しますが、サブディレクトリは検索しません。 リーリー grep

-s オプションは、存在しないファイルまたは読み取れないファイルが見つかった場合にエラー メッセージを非表示にします。結果は、ファイル名に加えて、リクエスト文字列を含む行も出力されることがわかります。

指定された文字列を含むファイルを再帰的に検索します

上記の場合、すべてのサブディレクトリは無視されます。いわゆる再帰的検索とは、すべてのサブディレクトリを同時に検索することを指します。

次のコマンドは、
/etc/ とそのサブディレクトリで、stretch 文字列を含むファイルを検索します。 リーリー

特定の単語を含むすべてのファイルを検索

上記の grep コマンドの場合、文字列

stretch
を含むすべてのファイルがリストされます。つまり、stretchesstretched などを含む行も表示されます。
grep

-w オプションを使用すると、特定の単語を含む行のみが表示されます: リーリー 特定のテキストを含むファイル名の表示

上面的命令都会产生多余的输出。下一个案例则会递归地搜索 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 命令还会列出所有包含 StretchSTRETCHStReTcH 等内容的文件,也就是说进行的是大小写不敏感的搜索。

# 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/*.conf
OR
# 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/*

以上がgrep を使用して、指定したテキストを含むすべてのファイルを検索しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlinuxprobe.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。