Wyszukaj wzór tekstu w systemie Linux


20

Jestem początkującym Linuksem. Muszę wyszukać ciąg „teststring” we wszystkich plikach * .java znajdujących się w katalogu / home / user1 / (łącznie z podfolderami). Jak mogę to zrobić w systemie Linux za pomocą polecenia powłoki.


Pojawiło się kilka pytań dotyczących wyszukiwania
wyrażeń

szybkie wyszukiwanie pokazało to pytanie: superuser.com/questions/208271/... nie do końca to, czego szukasz, ale zamiast exec cp możesz cat / grep cokolwiek
RobotHumans

Mogę wymienić plik o rozszerzeniu z find / home / user1 -name * .java Jak na tym używać grep?
darthvader

Odpowiedzi:


23

Najprostszym sposobem jest użycie funkcji GNU grep:

grep -r --include '*.java' teststring /home/user1

Jeśli kiedykolwiek korzystasz z innego wariantu unixa, który nie ma GNU grep, oto przenośny sposób:

find /home/user1 -name '*.java' -exec grep teststring {} +

nice nie wiedział o tej funkcji grep
RobotHumans

1
Jeśli szukasz aktualnego katalogu i wszystkich plikówgrep -r teststring .
Chris Moschini,


4

Dla tego ack aka ack-grep to moja aplikacja zabójcy;)

Możesz ack some_string /in/path_yznaleźć some_string w path_y Lub prościej ack some_other_stringjest znaleźć some_other_sting w bieżącym katalogu.


2

Znaleziono to. Publikowanie, ponieważ może komuś pomóc.

find /home/user01 -name *.java | xargs grep "teststring"

Popraw, jeśli istnieje lepszy sposób.


3
Ogólnie rzecz biorąc, powinieneś używać -print0i -0podczas przesyłania finddo, xargsaby poprawnie pracować z plikami, które mogą mieć spacje lub znaki nowej linii w nazwach:find /home/user01 -name *.java -print0 | xargs -0 grep "teststring"
Wstrzymane do odwołania.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.