Jak znaleźć pliki, które nie zawierają danego wzoru łańcucha?
Jak mogę znaleźć plikiw bieżącym katalogu, które Nie zawierają słowo foo
(używając grep
)?
11 answers
Jeśli twój grep ma opcję -L
(lub --files-without-match
):
$ grep -L "foo" *
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-04 17:39:03
Spójrz na ack
. Wykonuje on automatycznie wyłączenie .svn
, daje wyrażenia regularne Perla i jest prostym pobraniem pojedynczego programu Perla.
Odpowiednikiem tego, czego szukasz powinno być, w ack
:
ack -L foo
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-07 14:13:56
Poniższe polecenie daje mi wszystkie pliki, które nie zawierają wzorca foo
:
find . -not -ipath '.*svn*' -exec grep -H -E -o -c "foo" {} \; | grep 0
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-07 13:14:53
Poniższe polecenie wyklucza konieczność filtrowania folderów svn
za pomocą drugiego grep
.
grep -rL "foo" ./* | grep -v "\.svn"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-07 13:56:19
Będziesz potrzebował:
find . -not -ipath '.*svn*' -exec grep -H -E -o -c "foo" {} \; | grep :0\$
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-07 13:57:33
Miałem szczęście
grep -H -E -o -c "foo" */*/*.ext | grep ext:0
Moje próby z grep -v
po prostu dał mi wszystkie linie bez "foo".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-07 13:56:37
Otwórz raport o błędzie
Jak skomentował @tukan, jest otwarty raport o błędzie dla Ag dotyczący -L
/--files-without-matches
flaga:
Ponieważ postępy w zgłaszaniu błędów są niewielkie, opcja -L
wymieniona poniżej nie powinna być oparta na , dopóki błąd nie został rozwiązany. Zamiast tego użyj różnych podejść przedstawionych w tym wątku. Cytowanie komentarza do błędu "raport": {]}
Jakieś wieści na ten temat? -L
całkowicie ignoruje dopasowania w pierwszej linii pliku. Wygląda na to, że jeśli to nie zostanie wkrótce naprawione, flaga powinna zostać całkowicie usunięta, ponieważ skutecznie nie działa tak, jak jest reklamowana.
Silver Searcher-Ag (funkcja zamierzona - zobacz Raport o błędzie)
[[17]}jako potężną alternatywę dlagrep
, możesz użyć Silver Searcher - Ag :
Narzędzie do wyszukiwania kodu podobne do ack, z naciskiem na szybkość.
Patrząc na man ag
, znajdujemy opcję -L
lub --files-without-matches
:
... OPTIONS ... -L --files-without-matches Only print the names of files that don´t contain matches.
Czyli do rekurencyjnie Wyszukaj pliki, które nie pasują foo
, z bieżącego katalogu:
ag -L foo
Aby przeszukiwać tylko bieżący katalog dla plików, które nie pasują do foo
, po prostu określ --depth=0
dla rekurencji:
ag -L foo --depth 0
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-19 13:28:44
Mój grep nie ma żadnej opcji-L. Znajduję obejście, aby to osiągnąć.
Pomysły są:
- aby zrzucić całą nazwę pliku zawierającą Zasłużony ciąg znaków do txt1.txt.
- zrzuca całą nazwę pliku w katalogu do txt2.txt.
-
Zrób różnicę między 2 zrzutem pliku za pomocą polecenia diff.
grep 'foo' *.log | cut -c1-14 | uniq > txt1.txt grep * *.log | cut -c1-14 | uniq > txt2.txt diff txt1.txt txt2.txt | grep ">"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-08 03:37:47
find *20161109* -mtime -2|grep -vwE "(TRIGGER)"
Możesz określić filtr w "Znajdź", a łańcuch wykluczeń w "grep-vwE". Użyj mtime w obszarze Znajdź, jeśli chcesz filtrować zmodyfikowany czas.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-10 19:31:55
grep -irnw "filepath" -ve "pattern"
Lub
grep -ve "pattern" < file
Powyższe polecenie da nam wynik, ponieważ-v znajdzie odwrotność przeszukiwanego wzorca
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-30 18:43:26
Poniższe polecenie może pomóc w filtrowaniu linii zawierających podłańcuch "foo".
cat file | grep -v "foo"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-07 13:58:35