2017-07-19 7 views
0

Oft muss ich aus einem Verzeichnis und unten nach einem Muster in allen Dateien mit einem bestimmten Typ suchen. Zum Beispiel muss ich grep bitten, nicht in andere Dateien als * .h, * .cpp oder * .c zu schauen. Aber wenn ich gebe:Alias ​​für eine Kombination aus grep und find ist erforderlich

grep -r pattern . 

es sieht in allen Dateien. Wenn ich ein:

grep -r pattern *.c 

es versucht, * .c Dateien im aktuellen Ordner (keine Datei in meinem Fall) und Dateien in * .c Ordnern (keine Ordner in meinem Fall). Ich möchte es auch fragen, in alle Ordner zu schauen, aber nur in Datei mit dem gegebenen Typ. Ich denke, Grep ist nicht genug für diesen Zweck. Also, ich Hilfe von finden auch wie folgt aus:

grep pattern `find . -name '*c'` 

Zuerst lassen Sie mich wissen, ob ich richtig über die Hilfe finden zu bekommen. Kann Grep genug sein? Zweitens ziehe ich einen Alias ​​schreiben für bash wie folgt verwendet werden:

mygrep pattern c 

auf den gleichen Befehl übersetzt werden vermieden Nutzung von `und 'und einfacher sein. Ich habe versucht:

alias mygrep="grep $1 `find . -name '*$2'`" 

Aber es funktioniert nicht und gibt einen Fehler:

grep: c: No such file or directory 

Ich habe versucht, es zu ändern, aber ich konnte nicht zu einem erfolgreichen Alias ​​erfolgreich zu sein.

Irgendeine Idee?

+1

nur bestimmte Dateitypen suchen, 'grep -r --include =‚pattern'' .. es gibt auch andere Optionen, wie gut wie '--exclude' und '- '* c.' -exclude-dir' .. in jedem Fall, wie beantwortet, verwenden Sie die Funktion anstelle von Alias ​​ – Sundeep

Antwort

3

wäre dies besser als function than an alias getan, und -exec statt passing the output von find zu grep verwenden. Diese Ausgabe würde der Worttrennung und dem Globbing unterliegen und könnte daher überraschende Ergebnisse liefern. Stattdessen versuchen:

mygrep() { 
    find . -name "*$2" -exec grep "$1" {} + 
} 
+0

oh ok. und wo sollte ich diese Funktion setzen? – hamidi

+0

@hamidi du könntest es in dein '.bash_profile' oder wo auch immer du den Alias ​​setzen würdest –

+0

oh thx, es funktioniert perfekt. Kann ich die Farben von Grep behalten? – hamidi

Verwandte Themen