Jak mogę grep dla plików w strukturze katalogów, które mają ten tekst
addDesignControlChangeNotification
ale brakuje tego tekstu
removeDesignControlChangeNotification
Dzięki!
Uwaga: Mam na myśli katalog, w którym uruchamiany jest skrypt i wszystkie podkatalogi.
Odpowiedzi:
Oto jeden, który jest luźno oparty na Richie Homolki odpowiedź , ale działa na drzewach katalogów:
Wszelkie zwrócone pliki będą zawierać
addDesignControlChangeNotification
ale nieremoveDesignControlChangeNotification
.WYJAŚNIENIE:
find . -type f -exec grep -l foo {} \;
: Spowoduje to wydrukowanie wszystkich plików w dowolnym podkatalogu bieżącego katalogu zawierającego ciągfoo
. The-l
Flaga powoduje, że grep drukuje tylko nazwy pasujących plików.while read file
: iteruje po każdym pliku znalezionym powyżej, zapisując jego nazwę w zmiennej$file
.grep -q bar "$file" > /dev/null
: to polecenie szuka ciągubar
w każdym z zawartych w nim plikówfoo
.[ $? -ne 0 ] && echo $file;
: Jeśli wartość zwracana ($?
) zgrep
komenda miała wartość 0 (tzn. jeśli łańcucha nie było w pliku), wydrukuj nazwę pliku.źródło
find . -name '*.m' -type f -exec grep -l addDesignControlChangeNotification {}...
które dodałem, ponieważ nie wspomniałem o tym w pytaniu;) Dzięki!to powinno działać:
źródło
-r
do pierwszegogrep
polecenie, jeśli chcesz rekursować katalogi. Możesz też użyć mojej odpowiedzi;).Jedna linijka:
grep -r
jest rekurencyjnym grepem,<()
jest zastąpienie procesu , icomm
pokazuje linie, które para (posortowanych) plików ma / nie mają wspólnego. W tym przypadku chcemy tylko wyjście kolumny 1: linie w pierwszym pliku (gdzie „plik” jest naprawdę wyjściem grep), które nie znajdują się w drugim.źródło