Kiedy użyć polecenia:Używanie grep do wyszukiwania plików dostarczanych przez find: co jest nie tak z find. | xargs grep "..."?
find . | xargs grep '...'
mam złe wyniki. Próbuję wyszukać ciąg ...
we wszystkich plikach w bieżącym folderze.
Kiedy użyć polecenia:Używanie grep do wyszukiwania plików dostarczanych przez find: co jest nie tak z find. | xargs grep "..."?
find . | xargs grep '...'
mam złe wyniki. Próbuję wyszukać ciąg ...
we wszystkich plikach w bieżącym folderze.
Jak Andy White powiedział, trzeba użyć fgrep
w celu dopasowania do zwykłego .
lub ucieczki kropki.
Więc trzeba pisać (-type f
jest tylko pliki: Ci oczywiście nie chcą katalogi.):
find . -type f | xargs fgrep '...'
lub jeśli nadal chcesz używać grep:
find . -type f | xargs grep '\.\.\.'
a jeśli chcesz tylko aktualny katalogu a nie jego subdirs:
find . -maxdepth 1 -type f | xargs fgrep '...'
'grep -F '...'' powinno działać równie dobrze – Hasturkun
@Hasturkun: Tak. Po prostu mam tendencję do preferowania różnych nazw poleceń niż dodatkowe opcje (np. Używanie 'gunzip' zamiast' gzip -d'). Tylko kwestia gustu zwykle. –
Jeśli piszesz dosłownie grep '...'
, dopasujesz prawie dowolny ciąg. Wątpię, czy faktycznie wpisujesz '...'
dla polecenia grep, ale jeśli tak, to ...
będzie pasować do dowolnych trzech znaków.
Podaj więcej informacji o tym, czego szukasz, a może ktoś może pomóc Ci uzyskać więcej.
Jeśli szukasz pliku, który pasuje, spróbuj:
find . -name "filename pattern"
lub
find . | grep "filename pattern"
Jeśli szukasz szuka plików tego meczu (czyli zawiera grep string)
find . | xargs grep "string pattern"
działa dobrze. lub po prostu:
grep "string pattern" -R *
Tak, szukam plików zawierających ciąg "...", ale: 1. Znajdź. | xargs grep "ciąg wzór" lub 2. grep "ciąg wzór" -R * nie pomaga. – cupakob
"." dopasowuje dowolny znak, dzięki czemu znajdziesz wszystkie wiersze zawierające 3 lub więcej znaków.
Można też uciec kropki, na przykład:
find . | xargs grep '\.\.\.'
Albo można użyć fgrep, który robi dosłowne mecz zamiast meczu regex:
find . | xargs fgrep '...'
(niektóre wersje grep zaakceptuj również flagę -F, która sprawia, że zachowują się jak fgrep.)
Aby zakończyć odpowiedź Jeremy'ego, można również spróbować
find . -type f | xargs grep 'your_pattern'
lub
find . -type f -exec grep 'your_pattern' {} +
który jest podobny do xargs
dodam: RTFM! Lub w bardziej grzeczny sposób: użyj & nadużycie przez:
man command
!
Więcej uprzejmy? Przeczytaj przyjazną instrukcję? Jak można to uznać za niegrzeczne? Grzeczny dziwoląg. :) –
Strony man są rzeczywiście całkiem przyjazne i nie mogą się doczekać ponownego przeczytania. (Zrobiłeś mój dzień, Jeremy XD) –
Im później to się stanie, tym bardziej niepokoją moje komentarze. Myślę, że teraz osiągam szczyt. To wszystko znika stąd. –
@OP, jeśli szukasz plików, które zawierają ...
grep -R "\.\.\." *
Zdecydowanie najprostsze rozwiązanie. grep ma wbudowane przeszukiwanie plików rekurencyjnych. – duckbrain
masz więcej przykładów? –
następnie najpierw musisz nauczyć się poprawnie zadawać pytanie. technicznie, nie ma w tym nic złego. pytanie brzmi, co chcesz zrobić. opisać to poprawnie i wyraźnie – ghostdog74
masz na myśli, co mam jako odpowiedź? – cupakob