Rumah >Tutorial sistem >LINUX >Cara mencari fail yang mengandungi teks tertentu menggunakan grep dan ripgrep di linux
Perintah grep
dan ripgrep
dalam sistem Linux adalah alat carian mod teks yang kuat yang menyediakan pelbagai pilihan untuk menyempurnakan carian dan meningkatkan kecekapan. Panduan ini akan terperinci bagaimana menggunakan kedua -dua arahan ini untuk mencari fail yang mengandungi rentetan teks tertentu dalam kandungan fail.
Jadual Kandungan
ripgrep
grep
dan ripgrep
untuk mencari teks dalam failgrep
untuk mencari semua fail yang kandungannya mengandungi rentetan teks tertentu?grep
saya?grep
saya?ripgrep
dan mengapa saya harus menggunakannya?ripgrep
?ripgrep
yang biasa digunakan?ripgrep
menggunakan pilihan yang berbeza?grep
untuk mencari fail yang mengandungi rentetan teks tertentu grep
(Global Regular Expression Print) adalah utiliti baris arahan yang mencari corak dalam fail dan cetakan garis yang sepadan. Ia adalah alat pemprosesan teks yang kuat yang digunakan secara meluas dalam sistem operasi seperti Unix, termasuk Linux.
grep
menyokong ekspresi biasa, yang membolehkannya melakukan fleksibel melakukan pencocokan corak yang kompleks. Untuk maklumat lanjut mengenai penggunaan arahan grep
, lihat panduan berikut:
grep
(pemula)
Sekarang mari kita bincangkan cara menggunakan perintah grep
untuk mencari fail yang mengandungi perkataan atau frasa tertentu di Linux.
Untuk mencari rekursif untuk corak teks tertentu (termasuk pautan simbolik) dan paparkan nombor baris yang sesuai dengan corak, gunakan arahan berikut:
<code>grep -Rnw '/path/to/directory/' -e 'pattern'</code>
-R
: Melakukan carian rekursif, termasuk pautan simbolik.-n
: Tunjukkan nombor baris yang sepadan.-w
: Padankan keseluruhan perkataan sahaja.-e
: Tentukan corak untuk mencari. Ganti /path/to/directory/
dengan direktori yang anda cari dan 'pattern'
dengan corak teks yang anda cari.
Untuk mencari fail dengan sambungan tertentu, seperti fail .txt
dan .md
, gunakan pilihan --include
:
<code>grep --include=\*.{txt,md} -Rnw '/path/to/directory/' -e 'pattern'</code>
Untuk mengecualikan fail dengan sambungan tertentu, seperti fail .bak
dan .tmp
, gunakan pilihan --exclude
:
<code>grep --exclude=\*.{bak,tmp} -Rnw '/path/to/directory/' -e 'pattern'</code>
Untuk mengecualikan direktori tertentu dari carian, seperti node_modules
, .git
, dan direktori bermula dengan temp_
, gunakan pilihan --exclude-dir
:
<code>grep --exclude-dir={node_modules,.git,temp_*} -Rnw '/path/to/directory/' -e 'pattern'</code>
Untuk memaparkan hanya nama fail yang mengandungi corak (disusun abjad), gunakan pilihan -l
dan gabungkan dengan sort
:
<code>grep -Rlnw '/path/to/directory/' -e 'pattern' | sort</code>
Untuk memaparkan baris yang tidak sepadan dengan corak, gunakan pilihan -v
:
<code>grep -Rnwv '/path/to/directory/' -e 'pattern'</code>
Untuk memaparkan bilangan baris yang sepadan untuk setiap fail, gunakan pilihan -c
:
<code>grep -Rnwc '/path/to/directory/' -e 'pattern'</code>
Contoh-contoh ini menunjukkan pilihan lanjutan lain untuk carian teks penalaan yang baik menggunakan grep
pada Linux.
Beberapa arahan berikut harus dijalankan dengan kebenaran sudo
atau akar.
1. Cari rentetan "kata laluan" rentetan dalam semua fail dalam direktori semasa:
<code>grep -Rnw '.' -e 'password'</code>
2. Cari "Pengguna" dalam direktori /etc
secara tidak sensitif:
<code>grep -Rinw '/etc' -e 'user'</code>
3. Cari perkataan "Utama" dalam direktori /home/user/projects
:
<code>grep -Rnw '/home/user/projects' -e 'main'</code>
4. Cari "Todo" dalam semua .py
fail dalam direktori semasa:
<code>grep --include=\*.py -Rnw '.' -e 'TODO'</code>
5. Cari "sulit" dalam direktori /var/logs
, dan tidak termasuk fail .log
:
<code>grep --exclude=\*.log -Rnw '/var/logs' -e 'confidential'</code>
6. Cari "ralat" dalam direktori /var/log
dan paparkan hanya nama fail:
<code>grep -Rlnw '/var/log' -e 'error'</code>
7. Cari "gagal" dalam fail termampat (contohnya backup.zip
):
<code>zgrep -i 'fail' backup.zip</code>
8. Statistik Bilangan baris yang mengandungi perkataan "ralat" dalam direktori /var/log
:
<code>grep -Rnwc '/var/log' -e 'error'</code>
Perintah dan pilihan ini harus meliputi kebanyakan keperluan carian teks dalam persekitaran Linux.
ripgrep
ripgrep
( rg
) adalah alternatif moden kepada grep
, yang direka untuk menjadi lebih cepat dan lebih mesra pengguna, terutamanya ketika mencari pangkalan kod besar atau fail besar.
Ia ditulis dalam karat dan menggunakan teknologi yang cekap seperti pengoptimuman teks automaton, SIMD dan agresif yang terhad, menjadikannya lebih cepat daripada alat carian lain.
ripgrep
juga menyediakan output yang lebih intuitif dan berwarna -warni secara lalai, dan ia mempunyai set pilihan yang kaya untuk menyesuaikan tingkah laku carian.
Untuk mencari rentetan "fungsi" dalam direktori semasa:
<code>rg "search_string" .</code>
-i
: Melakukan carian kes-insensitif.-I
: Abaikan fail binari.-w
: Cari hanya seluruh perkataan.-n
: Tunjukkan nombor baris yang sepadan.-C
或--context
:显示匹配行周围的上下文(例如, -C3
显示匹配项之前和之后3行)。--color=auto
: Sorot teks yang sepadan.-H
: Menunjukkan nama fail teks yang dijumpai.-c
: Menunjukkan kiraan baris yang sepadan (boleh digabungkan dengan -H
). 1. Cari "ralat" dalam /var/log/
direktori secara tidak sensitif:
<code>rg -i "error" /var/log/</code>
2. Cari keseluruhan perkataan "pangkalan data" dalam direktori /home/user/config
:
<code>rg -w "database" /home/user/config</code>
3. Paparkan nombor garis dan konteks sekitar rentetan "Inisialisasi" dalam direktori semasa (sebelum dan selepas 3 baris):
<code>rg -n -C3 "initialize" .</code>
4. Cari rentetan "Diluluskan" dalam semua fail dalam direktori /var/www/html
, abaikan fail binari dan sorot perlawanan:
<code>rg -I --color=auto "deprecated" /var/www/html</code>
5. Paparkan bilangan baris yang sepadan dengan nama fail dan "berjaya" dalam direktori /opt/data
:
<code>rg -H -c "successful" /opt/data</code>
6. Cari "user_id", sambil mengabaikan fail binari dan memaparkan nama fail dalam direktori /etc
:
<code>rg -I -H "user_id" /etc</code>
7. Cari rentetan "sambungan" dan paparkan nama fail dan nombor talian di direktori /home/user/logs
:
<code>rg -H -n "connection" /home/user/logs</code>
Contoh -contoh ini menunjukkan kepelbagaian dan kuasa ripgrep
dalam pelbagai senario carian, terutama dalam projek besar dan fail besar.
grep
dan ripgrep
untuk mencari teks dalam failgrep
untuk mencari semua fail yang kandungannya mengandungi rentetan teks tertentu?
Untuk mencari rentetan tertentu dalam semua fail dalam direktori dan subdirektori, gunakan arahan berikut:
<code>grep -Rnw '/path/to/dir/' -e 'pattern'</code>
-R
: Melakukan carian rekursif, termasuk pautan simbolik.-n
: Tunjukkan nombor baris yang sepadan.-w
: Padankan keseluruhan perkataan sahaja.-e
: Tentukan corak untuk mencari.grep
saya?
Untuk memasukkan jenis fail tertentu:
<code>grep --include=\*.{sh,py} -Rnw '/path/to/dir/' -e 'pattern'</code>
Untuk mengecualikan jenis fail tertentu:
<code>grep --exclude=\*.tmp -Rnw '/path/to/dir/' -e 'pattern'</code>
grep
saya?
Untuk mengecualikan direktori tertentu:
<code>grep --exclude-dir={node_modules,dist,logs} -Rnw '/path/to/dir/' -e 'pattern'</code>
Gunakan pilihan -l
untuk memaparkan hanya nama fail yang sepadan:
<code>grep -Rlnw '/path/to/documents/' -e 'confidential'</code>
ripgrep
dan mengapa saya harus menggunakannya?
ripgrep
( rg
) adalah alternatif yang lebih cepat dan lebih cekap untuk grep
, terutamanya dalam projek besar dan fail besar. Ia berdasarkan enjin ekspresi biasa Rust, yang menggunakan pengoptimuman teks yang terhad, SIMD dan agresif untuk meningkatkan kelajuan carian.
ripgrep
?
Untuk mencari rentetan dalam semua fail dalam direktori semasa, gunakan:
<code>rg "pattern" .</code>
ripgrep
yang biasa digunakan?
-i
: Melakukan carian kes-insensitif.-I
: Abaikan fail binari.-w
: Cari hanya seluruh perkataan.-n
: Tunjukkan nombor baris yang sepadan.-C
atau --context
: menunjukkan konteks di sekitar baris yang sepadan (contohnya, -C3
menunjukkan 3 baris sebelum dan selepas perlawanan).--color=auto
: Sorot teks yang sepadan.-H
: Menunjukkan nama fail teks yang dijumpai.-c
: Menunjukkan kiraan baris yang sepadan (boleh digabungkan dengan -H
).ripgrep
menggunakan pilihan yang berbeza?
/var/logs
secara tidak sensitif:
<code>rg -i "session" /var/logs</code>
/etc
:
<code>rg -w "config" /etc</code>
/src
(sebelum dan selepas 4 baris):
<code>rg -n -C4 "initialize" /src</code>
/usr/share
, abaikan binari dan sorot perlawanan:
<code>rg -I --color=auto "deprecated" /usr/share</code>
/opt/logs
:
<code>rg -H -c "success" /opt/logs</code>
/home/user/settings
:
<code>rg -I -H "username" /home/user/settings</code>
/projects
:
<code>rg -H -n "import" /projects</code>
Dalam tutorial ini, kami membincangkan cara menggunakan arahan grep
dan ripgrep
untuk mencari fail yang mengandungi rentetan teks tertentu.
Walaupun grep
adalah alat yang komprehensif dan serba boleh, ripgrep
( rg
) menyediakan prestasi yang lebih baik dan pengalaman pengguna yang lebih moden, menjadikannya pilihan yang popular untuk carian teks, terutamanya dalam projek besar atau ketika bekerja dengan fail besar.
Bacaan Berkaitan :
Atas ialah kandungan terperinci Cara mencari fail yang mengandungi teks tertentu menggunakan grep dan ripgrep di linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!