grep でファイルごとに 1 回一致させるにはどうすればよいでしょうか? 質問する

grep でファイルごとに 1 回一致させるにはどうすればよいでしょうか? 質問する

一致の合計数を制御できるが、各ファイルの最初の一致で停止する grep オプションはありますか?

例:

これを実行するとgrep -ri --include '*.coffee' 're' .次のようになります:

./app.coffee:express = require 'express'
./app.coffee:passport = require 'passport'
./app.coffee:BrowserIDStrategy = require('passport-browserid').Strategy
./app.coffee:app = express()
./config.coffee:    session_secret: 'nyan cat'

そして、そうするとgrep -ri -m2 --include '*.coffee' 're' .、次のようになります:

./app.coffee:config = require './config'
./app.coffee:passport = require 'passport'

しかし、私が本当に欲しいのは次の出力です:

./app.coffee:express = require 'express'
./config.coffee:    session_secret: 'nyan cat'

-m1私はこれを取得すると動作しませんgrep -ri -m1 --include '*.coffee' 're' .

./app.coffee:express = require 'express'

grep を使わないようにすると、次のような結果find . -name '*.coffee' -exec awk '/re/ {print;exit}' {} \;が生成されます。

config = require './config'
    session_secret: 'nyan cat'

更新: 下記のように、GNU grep-mオプションはファイルごとのカウントを扱いますが、-mBSD grep ではグローバル一致カウントとして扱います。

ベストアンサー1

したがって、 を使用する場合grep、オプションは-l, --files-with-matches

find、またはシェル スクリプトに関するすべての回答はawk質問から外れています。

おすすめ記事