In Cygwin, schrieb ich eine bashrc Funktion rg, die im Grunde eine rekursive grep-Anweisung lautet:Mit -exec auf Ausgabe von bashrc Funktion
rg() {
find . -type f -exec grep -il $1 {} \;
}
Das funktioniert gut, aber jetzt muss ich auf einen zusätzlichen grep laufen jede Ausgangsleitung, um nach einem anderen Wort zu suchen. Ich möchte im Grunde, dass es jede Datei auflistet, die beide Wörter enthält (nicht unbedingt in derselben Zeile). Ich habe diesen Befehl versucht:
rg Word1 -exec grep -il Word2 {} \;
Dies scheint nur die gleichen Dateien ausgeben, die "Word1" enthalten.
Ich versuchte diesen nächsten Befehl, und ich dachte, es würde nur "Ha" auf jeder Zeile ausgeben, aber es führt immer noch die Dateien aus der "rg Word1" -Anweisung auf.
rg Word1 -exec echo "Ha" \;
Also mache ich hier offensichtlich etwas falsch. Kann jemand meine Verwirrung klären? Ich bin mir bewusst, dass es einen Weg gibt, dies in Grep selbst zu tun, aber das scheint pro Zeile zu funktionieren. Ich vermute, was ich versuche zu tun ist ziemlich üblich. Auch wenn ich das funktioniere, würde ich es gerne in eine andere Bashrc-Funktion einfügen. Nicht sicher, ob das komplizierter ist oder nicht.
Sie übergeben die '-exec grep -il Word2 {} \; 'als Argumente zu' rg', aber Sie verwenden sie nirgendwo in der Funktion, so dass sie keine Wirkung haben –
Also im Grunde bist du einfach Ausführen des Befehls 'finden. -type f -exec grep -il Word1 {} 'wie' $ 1' ist 'Word1' in beiden Beispielen. – 123
Also gibt es eine Möglichkeit, die "-exec Grep" kein Argument von rg? Ist es möglich, exec für eine Funktion wie diese zu verwenden? – Zip184