Lista nazw plików na podstawie wzorca nazwy pliku i zawartości pliku-GREP?
Jak mogę użyć polecenia Grep do przeszukiwania file name
na podstawie dzikiej karty "LMN2011*"
z listą wszystkich plików z tym jako początku?
Chcę jeszcze raz sprawdzić zawartość tych plików.
If file content
has some thing like
LMN20113456
Czy mogę użyć GREP
do tego?
Grep -ls "LMN2011*" "LMN20113456"
Jaki jest właściwy sposób przeszukiwania nazw plików i ich zawartości za pomocą poleceń powłoki?
5 answers
Grep nie używa "wildcards" do wyszukiwania – to shell globbing, jak *..jpg Grep używa "wyrażeń regularnych" do dopasowywania wzorców. Podczas gdy w powłoce ' * 'oznacza " cokolwiek", w grep oznacza "dopasuj poprzedni element zero lub więcej razy".
Więcej informacji i przykłady tutaj: http://www.regular-expressions.info/reference.html
Aby odpowiedzieć na twoje pytanie - możesz znaleźć pliki pasujące do jakiegoś wzorca z grep:
find /somedir -type f -print | grep 'LMN2011' # that will show files whose names contain LMN2011
Następnie możesz przeszukać ich zawartość (wielkość liter):
find /somedir -type f -print | grep -i 'LMN2011' | xargs grep -i 'LMN20113456'
Jeśli ścieżki mogą zawierać spacje, należy użyć funkcji "zero end":
find /somedir -type f -print0 | grep -iz 'LMN2011' | xargs -0 grep -i 'LMN20113456'
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-11-03 16:10:28
Można to zrobić również bez find
, używając opcji grepa "--include"
.
Strona man Grep mówi:
--include=GLOB
Search only files whose base name matches GLOB (using wildcard matching as described under --exclude).
Aby więc wykonać rekurencyjne wyszukiwanie ciągu znaków w pliku pasującym do określonego wzorca, będzie to wyglądało mniej więcej tak:
grep -r --include=<pattern> <string> <directory>
Na przykład, aby rekurencyjnie wyszukać ciąg znaków "mytarget" we wszystkich plikach Makefile:
grep -r --include="Makefile" "mytarget" ./
Lub wyszukiwanie we wszystkich plikach zaczynających się od "Make" w nazwie pliku:
grep -r --include="Make*" "mytarget" ./
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
2013-04-03 08:58:50
grep LMN20113456 LMN2011*
Lub jeśli chcesz przeszukiwać rekurencyjnie podkatalogi:
find . -type f -name 'LMN2011*' -exec grep LMN20113456 {} \;
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
2011-05-06 16:39:06
Find / folder-type f-mtime -90 / grep-E "(.txt|php/.inc|root|gif) | / xargs ls-l > WWWlastActivity.log
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
2013-11-04 13:16:22
Załóżmy, że pliki są wewnątrz /home/me
, ale pomijamy cokolwiek w /home/me/temp
lub poniżej:
find /home/me -name 'LMN2011*' -not -path "/home/me/temp/*" -print | xargs grep 'LMN20113456'
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-09-02 08:29:14