1

最近、Windows開発環境からApple開発環境に切り替えました。この移行は困難なプロセスでしたが、Windowsコマンドプロンプトで日常的に使用しているコマンドを補うために、ターミナルでUNIXベースのコマンドを取得するのに苦労しています。UNIXコマンドを理解しようとしているので、提供されたコマンドで何が起こっているのかについての基本的なレベルの説明は私にとって大きなボーナスですが、manualを読むことは外国語を読むようなものですほとんどの場合私。

私の質問は次のとおりです。次のWindowsCMDコマンドと非常によく似た出力を模倣または生成するために実行できる、できれば覚えるのに十分短い1行のコマンドはありますか。

findstr /s /c:"this piece of text" *.code

私はWindowsでこのコマンドを頻繁に使用して、引用符の間のテキストがサブディレクトリの*.codeパターンに一致するファイルのどこにあるかを示す結果セットを生成します。これを使用して、サーバーからプルバックされた多数のファイルのバージョン番号を確認し、大規模なプロジェクトで変数が宣言された場所を探すことができます。出力は次の形式で提供されます。

file1.code: other text this piece of text other text
file2.code: other text this piece of text other text
file3.code: other text this piece of text other text
file4.code: other text this piece of text other text
file5.code: other text this piece of text other text

他のテキストは、指定されたファイルの検索文字列と同じ行にある他のテキストです。ここで質問を検索したところfind . -name *.code、サブディレクトリ内のファイルのリストを作成するために使用している人が何人か見つかりました。次に、シーケンスと組み合わせ-execたコマンドのフラグを使用してテキストを検索します。私はこれを前述のいくつかの方法で試しましたが、失敗しました。エスケープシーケンスまたは文字の欠落が原因だと思います。そのまま検索した引用符の間に文字列をコマンドに与える方法があれば素晴らしいでしょう。findgrep

次のことを試しましたが、結果が得られませんでした...構文エラーでしょうか?

find . -exec grep -H .getItemToChange().getItemAttributes()

更新 正しいコードは、ジョンによる素晴らしい説明とともに以下に提供されています。これがあなたの好きなように役立つなら、私は彼の答えに賛成票を投じるのに役立ちました!

大規模なプロジェクトで、この関数呼び出しを含む.javaファイルを見つけたいと思っていました。結果は得られず、*。javaのみにフィルタリングする方法もありませんでした。

誰かがここで私を助けることができますか?コマンドの説明は大歓迎です。

4

1 に答える 1

2
find . -name '*.code' -exec grep -H 'pattern' {} +

シェルがワイルドカード'*.code'を展開しないように、必ず引用符で囲んでください。*通常、シェルで拡張を実行する必要がありますが、この場合、ワイルドカード拡張自体を実行できるように、リテラル文字列*.codeを渡す必要があります。find

使用するときはどこか-execに置く必要があります。{}見つかったファイル名のプレースホルダーです。また、コマンドのいずれか\;または最後に必要です。+これは、の引数findの終わりがどこにあるかを通知する方法です-exec(の後に他のアクションを実行することもできます-exec)。すべてのファイルで1回実行している間、ファイルごとに1回実行され\;ます。grep+grep

find . -name '*.code' -print0 | xargs -0 grep -H 'pattern'

これを行うもう1つの一般的な方法は、とをチェーン接続することfindですxargs。私はもっ​​とよく使う-execのが好きですが、find+xargsも同様に機能します。ここでの考え方はxargs、stdinで渡されたファイル名を取得し、それらのファイル名を追加してnamedコマンドを実行することです。渡されたファイル名の適切なリストを取得するには、findコマンドの出力をにパイプしますxargs

この-print0オプションはfind、見つかった各ファイルをNUL文字()とともに印刷するように指示します\0。これは、xargs-0オプションと密接に関連しています。を使用し-print0て、-0空白や引用符などの通常とは異なる文字を含むファイル名を正しく処理できるようにします。

于 2013-03-14T16:34:17.210 に答える