Gerçek Dünyada Size Yardımcı Olacak 16 grep Komut Örneği
Yayınlanan: 2021-02-23Başlangıçta Unix tabanlı sistemler için geliştirilen grep, Linux kutularında en yaygın kullanılan komut satırı yardımcı programlarından biridir.
Adı, ed aracındaki başka bir benzer komuttan gelir, yani g/ re / p , düzenli bir ifade için g lobal olarak arama ve eşleşen satırları yazdırma anlamına gelir. grep temel olarak standart girdi veya dosyadan belirli bir kalıbı veya düzenli ifadeyi arar ve verilen ölçütlerle eşleşen satırları yazdırır. Genellikle büyük günlük dosyalarından yalnızca gerekli bilgileri yazdırırken gereksiz ayrıntıları filtrelemek için kullanılır.
Düzenli ifadenin gücü, grep'te desteklenen seçeneklerle birleştiğinde bunu mümkün kılar.
Burada, sysadmin veya geliştirici tarafından farklı senaryolarda yaygın olarak kullanılan bazı grep komutlarını ele alacağız.
Öyleyse başlayalım…
grep Komut Sözdizimi
grep komutu, yönlendirme olmadan kullanılırsa bir dosya listesiyle birlikte bir model ve isteğe bağlı bağımsız değişkenler bekler.
$ grep [options] pattern [files]
Basit bir örnek:
$ grep my file.txt my_file $
Birden Fazla Dosya Arama
grep, verilen kalıbı yalnızca bir dosyada değil, birden çok dosyada aramanıza olanak tanır. *
joker karakterini kullanarak birden çok dosyada bir kalıbı nasıl arayacağınız aşağıda açıklanmıştır.
$ sudo grep -i err /var/log/messages*
Çıktı:
$ sudo grep err /var/log/messages* /var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: Using IOAPIC for interrupt routing /var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKA] (IRQs 5 9 10 *11) /var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKB] (IRQs 5 9 *10 11) /var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKC] (IRQs 5 *9 10 11) /var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKD] (IRQs 5 9 10 *11) /var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: Using IOAPIC for interrupt routing /var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKA] (IRQs 5 9 10 *11) /var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKB] (IRQs 5 9 *10 11) /var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKC] (IRQs 5 *9 10 11) /var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKD] (IRQs 5 9 10 *11) /var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: BERT: Boot Error Record Table support is disabled. Enable it by using bert_enable as kernel parameter. /var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKA] (IRQs 5 9 10 *11) /var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKB] (IRQs 5 9 *10 11) /var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKC] (IRQs 5 *9 10 11) /var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKD] (IRQs 5 9 10 *11) /var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: BERT: Boot Error Record Table support is disabled. Enable it by using bert_enable as kernel parameter. /var/log/messages-20201227:Dec 27 19:11:21 centos7vm kernel: [drm:vmw_host_log [vmwgfx]] *ERROR* Failed to send host log message. /var/log/messages-20201227:Dec 27 19:11:21 centos7vm kernel: [drm:vmw_host_log [vmwgfx]] *ERROR* Failed to send host log message. $
Yukarıdaki çıktıdan, grep
verilen deseni nerede bulduğunu belirtmek için eşleşen satırı yazdırmadan önce dosya adının yazdırıldığını gözlemleyebilirsiniz.
Büyük/Küçük Harfe Duyarsız Arama
grep, kalıbın durumuna bakmadan bir kalıbı aramayı önerir. Grep'e büyük/küçük harf durumunu yok saymasını söylemek için -i
işaretini kullanın.
$ grep -i [pattern] [file]
Çıktı:
$ grep -i it text_file.txt This is a sample text file. It contains functionality. You can always use grep with any kind of data but it works best with text data. It supports numbers like 1, 2, 3 etc. as well as This is a sample text file. It's repeated two times. $
Tam Kelime Arama
Her zaman kısmi bir eşleşme istemeyiz, bunun yerine grep'in yalnızca tam bir Word ile eşleşmesini bekleriz. Bunu -w
bayrağıyla yapabilirsiniz.
$ grep -w [pattern] [file]
Çıktı:
$ grep -w is text_file.txt This is a sample text file. It contains This is a sample text file. It's repeated two times. $
Maç Sayısını Kontrol Et
Bazen gerçek eşleşen satır yerine grep'in yaptığı başarılı eşleşmelerin sayısına ihtiyacımız var. -c
seçeneğini kullanarak bu sayımı alabiliriz.
$ grep -c [pattern] [file]
Çıktı:
$ grep -c is text_file.txt 2 $
Alt dizinleri ara
Yalnızca geçerli çalışma dizininde değil, aynı zamanda alt dizinlerde de dosya aramak genellikle gereklidir. grep, bunu -r
bayrağıyla kolayca yapmanızı sağlar.
$ grep -r [pattern] *
Çıktı:
$ grep -r Hello * dir1/file1.txt:Hello One dir1/file2.txt:Hello Two dir1/file3.txt:Hello Three $
Gözlemleyebileceğiniz gibi grep, geçerli bir dizindeki her bir alt dizini dolaşır ve bir eşleşmenin bulunduğu dosyaları ve satırları listeler.
Ters Arama
Belirli bir kalıba uymayan bir şey bulmak istiyorsanız, grep -v
bayrağıyla bunu yapmanıza izin verir.
$ grep -v [pattern] [file]
Çıktı:
$ grep This text_file.txt This is a sample text file. It contains This is a sample text file. It's repeated two times. $ grep -v This text_file.txt several lines to be used as part of testing grep functionality. You can always use grep with any kind of data but it works best with text data. It supports numbers like 1, 2, 3 etc. as well as alphabets and special characters like - + * # etc. $
grep
komutunun çıktısını -v
bayrağı olan ve olmayan aynı kalıp ve dosya üzerinde karşılaştırabilirsiniz. -v
ile desenle eşleşmeyen satırlar yazdırılır.
Satır Numaralarını Yazdır
grep, satırın dosyada nerede olduğunu bilmeyi kolaylaştıran basılı satırlarla birlikte satır numaralarını yazdırmanıza olanak tanır. Çıktıda satır numaralarını almak için gösterildiği gibi -n
seçeneğini kullanın.
$ grep -n [pattern] [file]
Çıktı:
$ grep -n This text_file.txt 1:This is a sample text file. It contains 7:This is a sample text file. It's repeated two times. $
grep Çıktısını Sınırla
Günlükler gibi büyük dosyalar için grep çıktısı uzun olabilir ve çıktıda her şeyi eşleştirmek yerine sabit sayıda satıra ihtiyacınız olabilir. Yazdırılan satırları sayı ile sınırlamak için – m[num]
'u kullanabiliriz. Nasıl kullanılacağı aşağıda açıklanmıştır:
$ grep -m[num] [pattern] [file]
Aşağıdaki örnekte -m
bayrağı kullanımının aynı koşullar kümesi için grep çıktısını nasıl etkilediğine dikkat edin:
$ grep It text_file.txt This is a sample text file. It contains It supports numbers like 1, 2, 3 etc. as well as This is a sample text file. It's repeated two times. $ grep -m2 It text_file.txt This is a sample text file. It contains It supports numbers like 1, 2, 3 etc. as well as $
Ek Satırları Görüntüle
Çoğu zaman, daha iyi bir bağlam için yalnızca eşleşen bir örüntüye sahip olan satırlara değil, onun üstündeki veya altındaki bazı satırlara ihtiyacımız vardır.

num
değerli -A
, -B
veya -C
işaretlerini kullanarak grep kullanarak bir örüntüye sahip bir satırın üstüne veya altına (veya her ikisine birden) bir satır yazdırmak mümkündür. Burada num
, eşleşen satırın hemen üstünde veya altında yazdırılacak ek satırların sayısını belirtir. Bu, grep'in belirtilen dosya veya dosya listesinde bulduğu tüm eşleşmeler için geçerlidir.
$ grep -A[num] [pattern] [file]
VEYA
$ grep -B[num] [pattern] [file]
VEYA
$ grep -C[num] [pattern] [file]
Aşağıdaki çıktı, normal bir grep çıktısının yanı sıra -A
, -B
ve -C
işaretli çıktıyı birer birer gösterir. Grep'in bayrakları ve değerlerini ve ilgili çıktıdaki değişiklikleri nasıl yorumladığına dikkat edin. -A1
bayrağı ile grep, eşleşen satırın hemen ardından gelen 1 satırı yazdırır.
Benzer şekilde -B1
bayrağı ile eşleşen satırın hemen önüne 1 satır yazdırır. -C1
bayrağı ile eşleşen satırdan önce ve sonra 1 satır yazdırır.
$ grep numbers text_file.txt It supports numbers like 1, 2, 3 etc. as well as $ grep -A1 numbers text_file.txt It supports numbers like 1, 2, 3 etc. as well as alphabets and special characters like - + * # etc. $ grep -B1 numbers text_file.txt kind of data but it works best with text data. It supports numbers like 1, 2, 3 etc. as well as $ grep -C1 numbers text_file.txt kind of data but it works best with text data. It supports numbers like 1, 2, 3 etc. as well as alphabets and special characters like - + * # etc. $
Dosya Adlarını Listele
Gerçekten eşleşen satırlar yerine bir kalıbın bulunduğu dosyaların adını yazdırmak için -l
işaretini kullanın.
$ grep -l [pattern] [file]
İşte bir örnek çalıştırma:
$ grep -l su *.txt file.txt text_file.txt $
Kesin Çizgileri Yazdır
Bazen belirli bir desenle tam olarak eşleşen satırları yazdırmamız gerekir, bir kısmıyla değil. grep, -x
bayrağının tam da bunu yapmasına izin verir.
$ grep -x [pattern] [file]
Aşağıdaki örnekte, file.txt tek kelimelik "destek" içeren bir satır içerir ve bu nedenle grep ile -x
bayrağıyla eşleştirilirken, diğer metinle birlikte "destek" kelimelerini içerebilecek satırlar göz ardı edilir.
$ grep -x support *.txt file.txt:support $
Maç Başlangıç Dizisi
Düzenli ifadeleri kullanarak, bir satırın başında bir dize bulabiliriz. İşte nasıl yapılacağı.
$ grep [options] "^[string]" [file]
Örnek:
$ grep It text_file.txt This is a sample text file. It contains It supports numbers like 1, 2, 3 etc. as well as This is a sample text file. It's repeated two times. $ grep ^It text_file.txt It supports numbers like 1, 2, 3 etc. as well as $
^
karakterini kullanmanın çıktıyı nasıl değiştirdiğini gözlemleyin. ^
, dizenin başlangıcını belirtir ve grep, ^It
ile It
sözcüğüyle başlayan herhangi bir satırla eşleşir. Tırnak içine almak, kalıp boşluk vb. içerdiğinde yardımcı olabilir.
Maç Bitiş Dizisi
Diğer bir yaygın kullanışlı düzenli ifade, çizgi deseninin sonunu eşleştirmektir.
$ grep [options] "[string]$" [file]
Örnek:
$ grep "\." text_file.txt This is a sample text file. It contains functionality. You can always use grep with any kind of data but it works best with text data. It supports numbers like 1, 2, 3 etc. as well as alphabets and special characters like - + * # etc. This is a sample text file. It's repeated two times. $ grep "\.$" text_file.txt kind of data but it works best with text data. alphabets and special characters like - + * # etc. This is a sample text file. It's repeated two times. $
ile eşleştirmeye çalıştık .
satırın sonundaki karakter. Nokta (.) özel anlamlı bir karakter olduğu için \
karakteri ile ondan kaçmamız gerekiyor. Sadece eşleştirdiğimizde çıktının nasıl değiştiğine tekrar dikkat edin .
karakteri ve grep'e yalnızca ile biten satırları eşleştirme talimatı vermek için $
kullandığımızda .
(arada herhangi bir yerde içerebilenler değil).
Desen Dosyasını Kullan
Sık kullandığınız bazı karmaşık kalıp listelerinin olduğu durumlar olabilir. Her seferinde yazmak yerine, bir dosyadaki kalıpların bir listesini belirtebilir ve -f
bayrağıyla kullanabilirsiniz. Dosya, her satırda bir desen içermelidir.
$ grep -f [pattern_file] [file_to_match]
Örneğimizde, aşağıdaki içeriklerle pattern.txt
kalıp dosyası adlarını oluşturduk:
$ cat pattern.txt This It $
Kullanmak için -f
bayrağını kullanın.
$ grep -f pattern.txt text_file.txt This is a sample text file. It contains It supports numbers like 1, 2, 3 etc. as well as This is a sample text file. It's repeated two times. $
Birden Fazla Model Belirtin
grep, -e
bayrağını kullanarak birden çok desen belirtmeye izin verir.
$ grep -e [pattern1] -e [pattern2] -e [pattern3]...[file]
Örnek:
$ grep -e is -e It -e to text_file.txt This is a sample text file. It contains several lines to be used as part of testing grep It supports numbers like 1, 2, 3 etc. as well as This is a sample text file. It's repeated two times. $
Genişletilmiş Normal İfadeyi Belirtin
grep ayrıca Genişletilmiş Normal İfadeleri veya -E
bayrağını kullanan ERE'yi destekler. Bu, Linux'taki egrep
komutuna benzer.
Meta karakterleri olduğu gibi ele almak istediğinizde ve bunları grep gibi dizeler olarak değiştirmek istemediğinizde ERE kullanmanın bir avantajı vardır. Bu, grep durumunda yapmamız gerektiği gibi, onlardan kaçmak açısından size daha fazla esneklik sağlar. Bununla birlikte, -E
grep ile kullanmak, egrep
komutuna eşdeğerdir.
$ grep -E '[Extended RegEx]' [file]
İşte ERE'nin yorumlanmamış veya boş olmayan satırları yazdırmak istediğimiz bir kullanımı. Bu, özellikle büyük yapılandırma dosyalarında bir şey bulmak için kullanışlıdır. Ek olarak, '^(#|$)'
kalıbıyla eşleşen satırları YAZDIRMAMAK için -v
bayrağını kullandım.
$ sudo grep -vE '^(#|$)' /etc/ssh/sshd_config HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key SyslogFacility AUTHPRIV AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication yes ChallengeResponseAuthentication no GSSAPIAuthentication yes GSSAPICleanupCredentials no UsePAM yes X11Forwarding yes AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE AcceptEnv XMODIFIERS Subsystem sftp /usr/libexec/openssh/sftp-server $
Çözüm
Yukarıdaki örnekler buzdağının sadece görünen kısmı. grep, bir dizi seçeneği destekler ve onu nasıl etkili bir şekilde kullanacağını bilen bir kişinin elinde çok yararlı bir araç olabilir. Yukarıda verilen örnekleri yalnızca kullanmakla kalmayıp, ihtiyacımız olanı elde etmek için bunları farklı şekillerde birleştirebiliriz.
Hakkında daha fazla bilgi edinmek için kılavuz sayfasına bakın.
$ man grep
Ardından, SFTP komut örneklerini öğrenin.