>  기사  >  시스템 튜토리얼  >  grep을 사용하여 지정된 텍스트가 포함된 모든 파일 찾기

grep을 사용하여 지정된 텍스트가 포함된 모든 파일 찾기

PHPz
PHPz앞으로
2024-03-08 09:31:12351검색

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

목표: 이 문서에서는 지정된 디렉터리나 전체 파일 시스템에서 지정된 단어나 문자열이 포함된 파일을 검색하는 방법에 대한 몇 가지 정보를 제공합니다.

난이도: 쉬움

약속:

  • # - 지정된 명령을 실행하려면 루트 권한을 사용해야 합니다. 루트 사용자를 사용하여 직접 실행할 수도 있고 sudo 명령
  • 을 사용할 수도 있습니다.
  • $ - 일반 사용자를 사용하여 지정된 명령을 실행할 수 있습니다
케이스
지정된 문자열이 포함된 파일에 대한 비재귀 검색

첫 번째 예에서는 /etc/ 디렉터리에서 stretch 문자열이 포함된 모든 파일을 검색하지만 하위 디렉터리는 검색하지 않습니다.

으아아아

grep-s 옵션은 존재하지 않거나 읽을 수 없는 파일이 발견될 때 오류 메시지를 숨깁니다. 결과는 파일 이름 외에도 요청 문자열이 포함된 줄도 출력된다는 것을 보여줍니다.

지정된 문자열이 포함된 파일을 재귀적으로 검색

위의 경우 모든 하위 디렉터리는 무시됩니다. 소위 재귀 검색은 모든 하위 디렉터리를 동시에 검색하는 것을 의미합니다.

다음 명령은 /etc/ 및 해당 하위 디렉터리에서 stretch 문자열이 포함된 파일을 검색합니다.

으아아아
특정 단어가 포함된 모든 파일 검색

위의 grep 명령 예에서는 stretch 문자열이 포함된 모든 파일을 나열합니다. 즉, 늘린 부분, 늘린 부분 등이 포함된 선도 표시됩니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 linuxprobe.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제