質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
grep

grepはコマンドライン上でテキスト検索を可能にするユーティリティーです。元はUnixのために用意されたものです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

Q&A

解決済

5回答

8700閲覧

grepでカレントディレクトリとサブディレクトリ全体を検索するには?

_CHO

総合スコア16

grep

grepはコマンドライン上でテキスト検索を可能にするユーティリティーです。元はUnixのために用意されたものです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

0グッド

0クリップ

投稿2015/09/07 13:30

編集2015/09/07 13:32

Linuxのgrepコマンドを実行した際に、カレントディレクトリのファイルとサブディレクトリのファイルすべてを検索するにはどうすればよいでしょうか?

カレントディレクトリに、"c_file1.c" というファイルを置いてあるとします。

./c_file1.c の内容は以下の通り。

C

1/* This is c_file1.c */ 2int c_function_1(void){ 3 return 0; 4}

また、カレントディレクトリ上の "folder1" というフォルダの中に、"c_file2.c" というファイルを置きます。

./folder1/c_file2.c の内容は以下の通り。

C

1/* This is c_file2.c */ 2int c_function_2(void){ 3 return 0; 4}

この環境下で、カレントディレクトリから "grep" コマンドを使い、"c_function_1" と "c_function_2" を両方抽出するにはどのように実行すればよいでしょうか?

たとえば、
$ grep -r "c_function_*" **/*.c
を実行すると、"c_file2.c" 上の、"c_function_2" はヒットしますが、"c_file1.c" 上のコードはヒットしません。
カレントディレクトリより一つ上のディレクトリから同じコマンドを実行すれば、両方ともヒットするのですが、やりたいことは、カレントディレクトリの変更をせずにヒットさせることです。

また、"grep" コマンドに加えて、vimgrepでも同様のことをやる方法を教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

ベストアンサー

とりあえず普通の grep だけ・・・


find と xargs を組み合わせる方法をよく見かけます。

find . -name '*.c' | xargs grep 'c_function_*'

gnu grep なら grep だけでもできそうです。

grep -r --include '*.c' 'c_function_*' .

投稿2015/09/07 13:53

ngyuki

総合スコア4514

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

**ということはzshですかね。
単に、
$ grep -r "c_function_*" *.c **/*.c
でいいのは?

追記:
訂正です。zshだと**でカレントディレクトリもマッチしますね。ということは、zshではなくて、***の書き誤りでしょうか?それでも、
$ grep "c_function_*" *.c */*.c
で良いですね。

投稿2015/09/07 13:49

編集2015/09/07 14:03
otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

find . -name ¥*.c -print | xargs grep なんちゃら

で探せると思います。

投稿2015/09/07 13:47

umeaji

総合スコア101

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

vimgrepを使える環境が無いので、grepに関してだけですが。

find . -name "*.c" -exec grep -Hn c_function_ {} ;

-Hn で、マッチしたフルパス名、そのファイルの行番号、行の中身を表示します。

投稿2015/09/15 12:54

hiroshi.kato

総合スコア93

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

私は、フォルダ以下の文字列検索は、もっぱら ag をつかっています。

(ag は .git や .svn 以下を検索対象から除外してくれます)

grep, find で行うなら、以下のページが参考になります。

投稿2015/09/07 20:20

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問