GNU/Linux >> Belajar Linux >  >> Linux

Cara menggunakan perintah grep Linux

Salah satu perintah Unix klasik, yang dikembangkan pada tahun 1974 oleh Ken Thompson, adalah perintah Global Regular Expression Print (grep). Ini sangat umum dalam komputasi sehingga sering digunakan sebagai kata kerja ("mengambil file") dan, tergantung pada seberapa culun audiens Anda, itu juga cocok dengan skenario dunia nyata. (Misalnya, "Saya harus mengambil bank memori saya untuk mengingat informasi itu.") Singkatnya, grep adalah cara untuk menelusuri file untuk pola karakter tertentu. Jika itu terdengar seperti fungsi Find modern yang tersedia di pengolah kata atau editor teks apa pun, maka Anda telah mengalami efek grep pada industri komputasi.

Jauh dari sekadar perintah kuno kuno yang telah digantikan oleh teknologi modern, kekuatan grep yang sebenarnya terletak pada dua aspek:

  • Grep bekerja di terminal dan beroperasi pada aliran data, sehingga Anda dapat menggabungkannya ke dalam proses yang kompleks. Anda tidak hanya dapat menemukan sebuah kata dalam file teks; Anda dapat mengekstrak kata, mengirimkannya ke perintah lain, dan seterusnya.
  • Grep menggunakan ekspresi reguler untuk memberikan kemampuan pencarian yang fleksibel.

Mempelajari grep perintah itu mudah, meskipun perlu latihan. Artikel ini memperkenalkan beberapa fiturnya yang menurut saya paling berguna.

[Unduh lembar contekan grep gratis kami]

Menginstal grep

Jika Anda menggunakan Linux, Anda sudah menginstal grep.

Di macOS, Anda memiliki grep versi BSD. Ini sedikit berbeda dari versi GNU, jadi jika Anda ingin mengikuti dengan tepat artikel ini, maka instal grep GNU dari proyek seperti Homebrew atau MacPorts.

Grep dasar

Sintaks grep dasar selalu sama. Anda memberikan grep perintahkan pola dan file yang ingin Anda cari. Sebagai imbalannya, ia mencetak setiap baris ke terminal Anda dengan kecocokan.

$ grep gnu gpl-3.0.txt
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
<http://www.gnu.org/licenses/>.
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

Secara default, grep perintah peka huruf besar/kecil, jadi "gnu" berbeda dari "GNU" atau "Gnu." Anda dapat membuatnya mengabaikan kapitalisasi dengan --ignore-case pilihan.

$ grep --ignore-case gnu gpl-3.0.txt
                    GNU GENERAL PUBLIC LICENSE
  The GNU General Public License is a free, copyleft license for
the GNU General Public License is intended to guarantee your freedom to
GNU General Public License for most of our software; it applies also to
[...16 more results...]
<http://www.gnu.org/licenses/>.
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

Anda juga dapat membuat grep perintah kembalikan semua baris tanpa kecocokan dengan menggunakan --invert-match pilihan:

$ grep --invert-match \
--ignore-case gnu gpl-3.0.txt
                      Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
[...648 lines...]
Public License instead of this License.  But first, please read

Pipa

Sangat berguna untuk dapat menemukan teks dalam file, tetapi kekuatan sebenarnya dari POSIX adalah kemampuannya untuk menyatukan perintah melalui "pipa." Saya menemukan bahwa penggunaan terbaik grep saya adalah ketika dikombinasikan dengan alat lain, seperti cut, tr, atau curl.

Misalnya, anggap saya memiliki file yang mencantumkan beberapa makalah teknis yang ingin saya unduh. Saya dapat membuka file dan mengklik setiap tautan secara manual, dan kemudian mengklik opsi Firefox untuk menyimpan setiap file ke hard drive saya, tetapi itu membutuhkan banyak waktu dan mengklik. Sebagai gantinya, saya dapat mengambil tautan dalam file, mencetak hanya string yang cocok dengan menggunakan --only-matching pilihan:

$ grep --only-matching http\:\/\/.*pdf example.html
http://example.com/linux_whitepaper.pdf
http://example.com/bsd_whitepaper.pdf
http://example.com/important_security_topic.pdf

Outputnya adalah daftar URL, masing-masing dalam satu baris. Ini cocok dengan cara Bash memproses data, jadi alih-alih mencetak URL ke terminal saya, saya bisa menyalurkannya ke curl :

$ grep --only-matching http\:\/\/.*pdf \
example.html | curl --remote-name

Lebih banyak sumber daya Linux

  • Lembar contekan perintah Linux
  • Lembar contekan perintah Linux tingkat lanjut
  • Kursus online gratis:Ikhtisar Teknis RHEL
  • Lembar contekan jaringan Linux
  • Lembar contekan SELinux
  • Lembar contekan perintah umum Linux
  • Apa itu container Linux?
  • Artikel Linux terbaru kami

Ini mengunduh setiap file, menyimpannya sesuai dengan nama file jarak jauhnya ke hard drive saya.

Pola pencarian saya dalam contoh ini mungkin tampak samar. Itu karena menggunakan ekspresi reguler, semacam bahasa "wildcard" yang sangat berguna saat menelusuri secara luas melalui banyak teks.

Ekspresi reguler

Tidak ada yang berada di bawah ilusi bahwa ekspresi reguler (singkatnya "regex") itu mudah. Namun, saya merasa sering kali memiliki reputasi yang lebih buruk daripada yang seharusnya. Memang, ada potensi bagi orang untuk menjadi sedikit terlalu pintar dengan regex sampai sangat tidak terbaca dan begitu luas sehingga terlipat dengan sendirinya, tetapi Anda tidak perlu melebih-lebihkan regex Anda. Berikut pengenalan singkat tentang regex cara saya menggunakannya.

Pertama, buat file bernama example.txt dan masukkan teks ini ke dalamnya:

Albania
Algeria
Canada
0
1
3
11

Elemen paling dasar dari regex adalah . karakter. Ini mewakili satu karakter.

$ grep Can.da example.txt
Canada

Pola Can.da berhasil mengembalikan Canada karena . karakter mewakili satu karakter.

. wildcard dapat dimodifikasi untuk mewakili lebih dari satu karakter dengan notasi berikut:

  • ? cocok dengan item sebelumnya nol atau satu kali
  • * cocok dengan item sebelumnya nol kali atau lebih
  • + cocok dengan item sebelumnya satu kali atau lebih
  • {4} cocok dengan item sebelumnya empat kali (atau nomor apa pun yang Anda masukkan dalam kurung kurawal)

Berbekal pengetahuan ini, Anda dapat berlatih regex di example.txt sepanjang sore, melihat kombinasi menarik apa yang Anda hasilkan. Beberapa tidak akan bekerja; orang lain akan. Yang penting adalah menganalisis hasilnya, jadi Anda mengerti alasannya.

Regex lanjutan memerlukan --extended-regexp atau -E pilihan.

Misalnya, ini gagal mengembalikan negara mana pun:

$ grep -E A.a example.txt

Gagal karena . karakter hanya bisa cocok dengan satu karakter kecuali Anda menaikkannya. Menggunakan * karakter, Anda dapat memberi tahu grep untuk mencocokkan satu karakter nol atau sebanyak yang diperlukan hingga mencapai akhir kata. Karena Anda tahu daftar yang Anda hadapi, Anda tahu bahwa nol kali tidak berguna dalam hal ini. Jelas tidak ada nama negara tiga huruf dalam daftar ini. Jadi sebagai gantinya, Anda dapat menggunakan + untuk mencocokkan satu karakter setidaknya sekali dan sekali lagi sebanyak yang diperlukan hingga akhir kata:

$ grep -E A.+a example.txt
Albania
Algeria

Anda dapat menggunakan tanda kurung siku untuk memberikan daftar huruf:

$ grep -E [AC].+a example.txt
Albania
Algeria
Canada

Ini juga berfungsi untuk angka. Hasilnya mungkin mengejutkan Anda:

$ grep [1-9] example.txt
1
3
11

Apakah Anda terkejut melihat 11 dalam pencarian angka 1 sampai 9?

Apa yang terjadi jika Anda menambahkan 13 ke daftar Anda?

Angka-angka ini dikembalikan karena termasuk 1, yang merupakan salah satu daftar angka yang harus dicocokkan.

Seperti yang Anda lihat, regex adalah teka-teki, tetapi melalui eksperimen dan latihan, Anda bisa merasa nyaman dengannya dan menggunakannya untuk meningkatkan cara Anda memahami data Anda.

Unduh lembar contekan

grep perintah memiliki lebih banyak opsi daripada yang saya tunjukkan di artikel ini. Ada opsi untuk memformat hasil yang lebih baik, membuat daftar file dan nomor baris yang berisi kecocokan, memberikan konteks untuk hasil dengan mencetak garis di sekitar kecocokan, dan banyak lagi. Jika Anda sedang mempelajari grep, atau Anda sering menggunakannya dan beralih ke pencarian melalui info halaman, Anda akan membantu diri Anda sendiri dengan mengunduh lembar contekan kami untuk itu. Lembar contekan menggunakan opsi singkat (-v bukannya --invert-matching , misalnya) sebagai cara untuk membuat Anda terbiasa dengan steno grep umum. Ini juga berisi bagian regex untuk membantu Anda mengingat kode regex yang paling umum. Unduh lembar contekan grep hari ini!


Linux
  1. Cara menggunakan perintah history di Linux

  2. Cara menggunakan Perintah Su di Linux

  3. Cara Menggunakan Perintah id di Linux

  1. Cara Menggunakan Perintah Sudo di Linux

  2. Gunakan perintah grep Linux

  3. Cara menggunakan perintah "layar" di Linux

  1. Cara Menggunakan Linux di Command

  2. Cara Menggunakan Perintah sejarah Linux

  3. Cara Menggunakan Perintah Linux xargs