5

次のコマンドをbashエイリアスに変換するにはどうすればよいですか?

find . -name '*.php' | xargs grep --color -n 'search term'

ファイル拡張子を指定でき、「検索語」は明らかに検索語です:)

だから私がしたいのは:

 searchFiles 'php' 'search term'

入力をエイリアスに渡すにはどうすればよいですか?bashスクリプトを作成し、エイリアスがスクリプトを指すようにする必要がありますか?

4

4 に答える 4

8

関数を使ってみてはどうですか?これを .bashrc に追加します。

function searchFiles() {
       find . -name \*."$1" -print0 | xargs -0 grep --color -n "$2"
}

そしてそれを次のように使用します:

$ searchFiles c include

于 2009-11-25T23:35:41.760 に答える
5

エイリアスを使用することもできますが、Gonzalo が示しているように関数を使用するのは賢明なことです。

alias searchFiles=sh\ -c\ \''find . -name \*."$1" -type f -print0 | xargs -0 grep --color -Hn "$2"'\'\ -

関数でもエイリアスでも、findおよびxargsと一緒に使用-print0することをお勧めします。これにより、より堅牢なファイル名処理 (最も一般的にはファイル名のスペース) が提供されます。-0

于 2009-11-25T23:58:01.263 に答える
1

関数が機能している間は、他のプログラムやスクリプトから呼び出すことはできません (苦労することはありません)。(エイリアスにも同じ問題があります。) 直接呼び出したいように聞こえるので、別のスクリプトを選択することをお勧めします。

#!/bin/bash
# since you're already using bash, depend on it instead of /bin/sh
# and reduce surprises later (you can always come back and look at
# porting this)

INCLUDE="*.$1"
PATTERN="$2"
grep --color -n "$PATTERN" --recursive --include="$INCLUDE" .

(あなたが持っているものを見つける必要はありません。)

これが直接ではなく別のスクリプト内でのみ使用された場合、関数はより簡単になります。

于 2009-11-26T00:02:56.713 に答える
1

シェル関数は優れていますが、ackも参照してください。ファイル固有の検索を色分けして処理するため、例は単純になります

ack --php somepattern
于 2010-03-10T16:00:20.707 に答える