Cari pola teks di linux

20

Saya seorang pemula linux. Saya perlu mencari string "teststring" di semua file * .java yang berada di bawah / home / user1 / (termasuk subfolder). Bagaimana saya bisa melakukannya di linux melalui perintah shell.

darthvader
sumber
Ada beberapa pertanyaan tentang regex mencari file di subdirektori dari command-line
RobotHumans
pencarian cepat muncul pertanyaan ini: superuser.com/questions/208271/… tidak persis apa yang Anda cari, tetapi alih-alih eksekutif cp Anda bisa
melecehkan
Saya dapat membuat daftar file dengan ekstensi dengan find / home / user1 -name * .java Bagaimana cara menggunakan grep?
darthvader

Jawaban:

23

Cara termudah adalah dengan menggunakan fitur GNU grep:

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

Jika Anda pernah menggunakan varian unix lain yang tidak memiliki GNU grep, berikut adalah cara yang portabel:

find /home/user1 -name '*.java' -exec grep teststring {} +
Gilles 'SANGAT berhenti menjadi jahat'
sumber
bagus tidak tahu tentang fitur grep ini
RobotHumans
1
Jika Anda sedang mencari dir dan semua file saat inigrep -r teststring .
Chris Moschini
4

menggunakan ack Anda cukup mengetik:cd /home/user01 && ack --java teststring

Benoit
sumber
1
atauack --java teststring /home/user01
Andy Lester
4

Untuk ack ini alias ack-grep , ini adalah aplikasi pembunuh di pikiran saya;)

Anda dapat ack some_string /in/path_ymenemukan some_string di path_y Atau lebih mudah ack some_other_stringuntuk menemukan some_other_sting di dir saat ini.

zzeroo
sumber
2

Menemukannya. Mempostingnya karena dapat membantu seseorang.

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

Harap perbaiki jika ada cara yang lebih baik.

darthvader
sumber
3
Secara umum, Anda harus menggunakan -print0dan -0ketika perpipaanfind ke xargsberfungsi dengan baik dengan file yang mungkin memiliki spasi atau baris baru dalam namanya:find /home/user01 -name *.java -print0 | xargs -0 grep "teststring"
Dijeda sampai pemberitahuan lebih lanjut.
0
grep -irl teststring *java
Unni
sumber