Aliasing operacji rurociągów w bash

1

Często robię coś grep -R foo .w rodzaju podstawy projektu. Jest to pomocne, ale wyniki są rozcieńczane przez włączenie pliku binarnego. temp i testuj pliki, które mnie nie obchodzą. Tak więc kończę na umieszczaniu 2>&1 | grep -vE “Binary|/tmp/|/test/“, co odfiltrowuje rzeczy, na których mi nie zależy. Problem polega na tym, że pisanie za każdym razem jest trudne. Wszystko, w tym i po 2> i 1, pozostaje takie samo od zapytania do zapytania. Więc chcę umieścić to w pseudonimie, który by mi pozwolił grep -R foo . <thingie>, gdzie coś jest dość krótkie. Próbowałem aliasy i zmienne środowiskowe, ale aliasy działają tylko wtedy, gdy są pierwszym słowem w wierszu, a zmienne środowiskowe, które mogę rozwinąć, ${thingie}ale w tym procesie wydaje się, że rurociąg jest zepsuty. Wszelkie pomysły na to, jak to zrobić?

Chris
źródło
1
Jeśli rozumiem twoje wymagania, możesz napisać funkcję i zainstalować funkcję w pliku startowym bash.
fd0

Odpowiedzi:

2

Tak, funkcja jest właściwą drogą. Jeśli masz GNU grep

  1. skorzystaj z tej --exclude-diropcji, aby wyszukiwanie rekurencyjne nawet nie przeszkadzało.
  2. użyj --binary-files=without-matchopcji, aby zignorować pliki binarne (alias -I).

Więc:

mygrep() {
    grep -R --exclude-dir=tmp --exclude-dir=test -I "$@" .
}

Wtedy zadzwoń

mygrep Foo
mygrep -i foo
mygrep -E '(foo|bar)baz'
Glenn Jackman
źródło