ファイル内の文字列を検索する

やりたいこと

CentOSで、特定の文字列について、任意のディレクトリ配下(サブディレクトリも含めて)に存在する全てのファイルを検索する方法。findを使ってなんとかする方法。

書式

find [対象ディレクトリ] -type f -print | xargs grep -n '[検索文字列]'

かんたんなせつめい

  • カレントディレクトリ以下に対して検索を実行(find ./)
  • ファイルタイプが「ファイル」であるものに対して実行(-type f)
  • 検索結果を標準出力に表示(-print)

パイプ先でしていること

  • findの出力をxargsでリスト化する
  • grepで条件(検索対象の文字列)を指定する
  • grepに-nオプションを付与して行番号を表示する

カレントディレクトリ配下のファイルの内容についてhogeという文字列で検索する。

find . -type f -print | xargs grep -n 'hoge'

実行結果

[root@centos test]# ls -al
total 12
drwxr-xr-x   2 root root   35 Nov 28 08:45 .
dr-xr-x---. 25 root root 4096 Nov 27 09:50 ..
-rw-r--r--   1 root root   18 Nov 28 08:45 hi.txt
-rw-r--r--   1 root root   25 Nov 28 08:45 hoi.txt
[root@centos test]# cat ./*
aaa
bbb
hoge
ccc

aaa
bbb
ccc
ddd
hoge
fff
[root@sara test]# find . -type f -print | xargs grep -n 'hoge'
./hi.txt:3:hoge
./hoi.txt:5:hoge
[root@centos test]#

grepに-nオプションを付与するとファイル名の次に行番号が表示される。

おまけ

ファイル名だけ調べるならgrepに-rlオプションつけるだけでもOK。

書式

grep -rl [検索文字列] [調査対象ディレクトリ]

[root@centos test]# grep -rl 'hoge' .
./hi.txt
./hoi.txt
[root@centostest]#

Leave a Comment