{"id":871,"date":"2025-05-21T16:50:14","date_gmt":"2025-05-21T13:50:14","guid":{"rendered":"https:\/\/melic.com\/wp1\/?p=871"},"modified":"2025-05-21T16:50:14","modified_gmt":"2025-05-21T13:50:14","slug":"regex-ve-grep-beraber-nasil-kullanilir","status":"publish","type":"post","link":"https:\/\/melic.com\/wp1\/regex-ve-grep-beraber-nasil-kullanilir\/","title":{"rendered":"Regex ve Grep beraber nas\u0131l kullan\u0131l\u0131r"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Ben <strong>Grep <\/strong>komutlar\u0131n\u0131 <strong>Docker <\/strong>komutlar\u0131n\u0131 kullan\u0131rken \u00e7ok kullan\u0131yorum bu y\u00fczden sizinde ihtiyac\u0131n\u0131 kar\u015f\u0131layaca\u011f\u0131n\u0131 d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcm bu kullan\u0131m \u015feklini <strong>Docker <\/strong>\u00f6rnekleri ile size iletmeye \u00e7al\u0131\u015faca\u011f\u0131m.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bug\u00fcne kadar okuduysan\u0131z yaz\u0131l\u0131r\u0131m olduk\u00e7a basit bir anlat\u0131m i\u00e7erisinde olur ve olabildi\u011fince ba\u015flang\u0131\u00e7 seviyesinde tutmaya \u00e7al\u0131\u015f\u0131r\u0131m. Daha \u00fcst d\u00fczey bilgiler i\u00e7in bu y\u00fczden kendi ara\u015ft\u0131rman\u0131z\u0131 yapman\u0131z gerekebilir. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gelelim konumuza , <strong>Docker <\/strong>komutlar\u0131yla \u00e7al\u0131\u015f\u0131rken <strong>regex <\/strong>kullanmak i\u00e7in dikkat etmeniz gereken birka\u00e7 \u00f6nemli nokta var. Normalde <strong>regex&#8217;in GREP<\/strong> komutuyla uyumsuz olmas\u0131 nedeniyle esas\u0131nda baz\u0131 s\u0131k\u0131nt\u0131lar ya\u015f\u0131yoruz ya da ben baya cebelle\u015ftim. <strong>GREP <\/strong>komutu, normalde yaln\u0131zca d\u00fcz metin aramalar\u0131 i\u00e7in tasarlanm\u0131\u015ft\u0131r ve regex&#8217;i do\u011frudan bu \u015fekilde kullanaman\u0131za izin vermez. Ancak <strong><code>grep<\/code> <\/strong>komutuyla <strong>regex <\/strong>kullanabilmek i\u00e7in <strong><code>-P<\/code> (perl regex)<\/strong> ve <strong><code>-o<\/code> (sadece e\u015fle\u015fen k\u0131sm\u0131 g\u00f6ster)<\/strong> gibi ek se\u00e7enekleri beraber ya da ayr\u0131 ayr\u0131 kullanabilirsiniz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Benim burada regex ile grep i kullanarak bir Docker konteynerinin ID&#8217;sini almak ve ald\u0131\u011f\u0131m bu id ile ba\u015fka bir Docker komutunu \u00e7al\u0131\u015ft\u0131rabilmek istiyorum. Hadi bu sorunumuzu nas\u0131l \u00e7\u00f6zece\u011fimizi inceleyelim.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Sorunun \u00e7\u00f6z\u00fcm\u00fc i\u00e7in uygulanmas\u0131 gereken ad\u0131mlar\u0131 \u015f\u00f6yle s\u0131ralanabilir:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Regex yaz\u0131m\u0131n\u0131 g\u00f6zden ge\u00e7irelim<\/strong>: <code>docker ps<\/code> \u00e7\u0131kt\u0131s\u0131ndaki ilk grup genellikle container ID&#8217;si olacak. <code>docker ps<\/code> \u00e7\u0131kt\u0131s\u0131ndaki ID&#8217;ler genellikle \u015f\u00f6yle bir formata sahiptir: <code>abcdef123456<\/code>.\n<ul class=\"wp-block-list\">\n<li><strong>Regex&#8217;inizi biraz daha sadele\u015ftirebiliriz<\/strong>: ID&#8217;yi \u00e7ekmek i\u00e7in \u015f\u00f6yle bir regex kullanmak yeterli olacakt\u0131r: <br><br><strong><code>regex([a-f0-9]+) <\/code><\/strong><br><br>Bu, 12 karakterlik hexadecimal bir diziyi yakalayacakt\u0131r (<em>Docker container ID&#8217;leri b\u00f6yle bir formattad\u0131r<\/em>).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><code>grep<\/code> kullan\u0131m\u0131<\/strong>: <code>grep<\/code> komutunun do\u011fru \u00e7al\u0131\u015fabilmesi i\u00e7in <strong><code>-P<\/code> (Perl compatible regex) <\/strong>ve <strong><code>-o<\/code> (sadece e\u015fle\u015fen k\u0131sm\u0131 g\u00f6ster) <\/strong>se\u00e7eneklerini ekleyebilirsiniz. \u00d6rnek komut \u015f\u00f6yle olacakt\u0131r: <br><br><code><strong>docker ps | grep containername | grep -oP '([a-f0-9]+)'<\/strong><\/code><br><\/li>\n\n\n\n<li><strong>Alternatif olarak <code>awk<\/code> kullanabilirsiniz<\/strong>: <code>docker ps<\/code> \u00e7\u0131kt\u0131s\u0131ndaki container ID&#8217;lerini al\u0131rken <code>awk<\/code> komutunu da kullanabilirsiniz, \u00e7\u00fcnk\u00fc <code>awk<\/code> ile daha esnek bir \u015fekilde s\u00fctun bazl\u0131 se\u00e7imler yapabilirsiniz. \u00d6rnek olarak: <br><br><strong><code>docker ps | grep containername | awk '{print $1}' <\/code><\/strong><br><br>Bu, her sat\u0131rdaki ilk s\u00fctunu (container ID&#8217;si) yazd\u0131r\u0131r.<br><\/li>\n\n\n\n<li><strong>Daha karma\u015f\u0131k regex kullan\u0131m\u0131<\/strong>: E\u011fer ger\u00e7ekten karma\u015f\u0131k bir regex ihtiyac\u0131n\u0131z varsa, o zaman Perl veya <code>sed<\/code> gibi daha g\u00fc\u00e7l\u00fc ara\u00e7lar da kullan\u0131labilir. Ama bizim konumu GREP ve Regex oldu\u011fu i\u00e7in buna deyinmeyece\u011fim.Ancak ipucunu verdim ; e\u011fer burada payla\u015ft\u0131klar\u0131m size yard\u0131mc\u0131 olmayacaksa neyi araman\u0131z gerekti\u011fini art\u0131k biliyorsunuz.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Sonu\u00e7 olarak, direkt <code>grep<\/code> ile regex kullan\u0131rken dikkat edilmesi gereken \u015fey, <code>-P<\/code> ve <code>-o<\/code> se\u00e7eneklerinin eklenmesidir. Bu sorunumuzun \u00e7\u00f6zmene yard\u0131mc\u0131 olacakt\u0131r!<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">\u015e\u00f6yle bir geli\u015ftrime yapal\u0131m kodumuzda :<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">M<em>esela ilk buldu\u011fu e\u015fle\u015fmedeki ilk 5 karakteri almak istersem<\/em>  ?  <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Yani ilk buldu\u011fumuz e\u015fle\u015fmenin ilk 5 karakterini almak i\u00e7in, <strong><code>grep<\/code> <\/strong>ile <strong>regex <\/strong>kullan\u0131rken bu iste\u011fi yerine getirmek biraz daha detayl\u0131 olacakt\u0131r elbett. Ancak yine de bunu <strong><code>grep<\/code> <\/strong>ve <strong><code>sed<\/code> <\/strong>gibi ara\u00e7larla \u00e7\u00f6zebiliriz. Nas\u0131l m\u0131 ?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Y\u00f6ntem 1: <code>grep<\/code> ve <code>cut<\/code> kullanarak<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>GREP <\/strong>ile e\u015fle\u015fen k\u0131sm\u0131 bulduktan sonra, ilk 5 karakteri almak i\u00e7in <strong><code>cut<\/code> <\/strong>komutunu kullanabiliriz:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code><strong>docker ps | grep containername | grep -oP '([a-f0-9]+)' | head -n 1 | cut -c 1-5<\/strong><br><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Burada:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code><strong>grep -oP '([a-f0-9]+)'<\/strong><\/code> ile container ID&#8217;sini al\u0131yoruz.<\/li>\n\n\n\n<li><strong><code>head -n 1<\/code> <\/strong>komutu, ilk e\u015fle\u015fmeyi almak i\u00e7in kullan\u0131l\u0131yor.<\/li>\n\n\n\n<li><code><strong>cut -c 1-5<\/strong><\/code> komutu, ilk 5 karakteri al\u0131yor.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Y\u00f6ntem 2: <code>grep<\/code> ve <code>sed<\/code> kullanarak<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Alternatif olarak, <strong><code>sed<\/code> <\/strong>kullanarak da ilk 5 karakteri alabilirsiniz:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code><strong>docker ps | grep containername | grep -oP '([a-f0-9]+)' | head -n 1 | sed 's\/^\\(.\\{5\\}\\).*$\/\\1\/'<br><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Bu komut \u015fu ad\u0131mlar\u0131 izler:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code><strong>grep -oP '([a-f0-9]+)'<\/strong><\/code>: Docker container ID&#8217;sini \u00e7\u0131kar\u0131r.<\/li>\n\n\n\n<li><code><strong>head -n 1<\/strong><\/code>: \u0130lk e\u015fle\u015fmeyi al\u0131r.<\/li>\n\n\n\n<li><code><strong>sed 's\/^\\(.\\{5\\}\\).*$\/\\1\/'<\/strong><\/code>: <code>sed<\/code> komutu, sat\u0131r\u0131n ba\u015f\u0131ndaki ilk 5 karakteri al\u0131r ve geri kalan\u0131n\u0131 yok sayar.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Y\u00f6ntem 3: <code>awk<\/code> kullanarak<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><code>awk<\/code> <\/strong>ile de ayn\u0131 \u015fekilde \u00e7\u00f6z\u00fcm \u00fcretebiliriz. \u00d6rne\u011fin:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code><strong>docker ps | grep containername | awk '{print substr($1, 1, 5)}'<\/strong><br><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Burada:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>substr($1, 1, 5)<\/code> <\/strong>komutu, her sat\u0131r\u0131n ilk s\u00fctunundaki (container ID) ilk 5 karakteri al\u0131r.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u00d6zet<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0130lk e\u015fle\u015fmenin ilk 5 karakterini almak i\u00e7in <strong><code>grep<\/code> <\/strong>ile filtreleme yapt\u0131ktan sonra, <code><strong>cut<\/strong><\/code>, <strong><code>sed<\/code> <\/strong>veya <strong><code>awk<\/code> <\/strong>gibi komutlar\u0131 kullanarak bu k\u0131sm\u0131 alabilirsin. E\u011fer birden fazla e\u015fle\u015fme varsa, sadece ilkini almak i\u00e7in <code><strong>head -n 1<\/strong><\/code> kullanmak i\u015finize yarayacakt\u0131r.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">\u015e\u00f6yle bir g\u00fcncelleme yapal\u0131m sorunumuz ile ilgili:<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">\u015eu anda ilk kelimenin ilk 5 karakaterini alabiliyorum ama bu komutu \u015fu \u015fekilde kullanmak istiyorum  :<br><em>docker logs -f -n 100 &lt;ald\u0131\u011f\u0131m 5 karakter> <\/em><br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00d6zetle maksat Docker container loglar\u0131n\u0131 g\u00f6rmek i\u00e7in sadece <strong>container ID<\/strong>&#8216;sinin ilk 5 karakterini almak istiyoruz. Ama <code>docker logs -f -n100 &lt;container_id><\/code> komutunu dinamik olarak \u00e7al\u0131\u015ft\u0131rmakta ana hedefim.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bu durumda, <strong>ba\u015fka bir komutla bu 5 karakteri <code>docker logs<\/code> komutuna ge\u00e7irmen<\/strong> gerekiyor. Yani, <strong>komutlar\u0131n \u00e7\u0131kt\u0131s\u0131n\u0131 birle\u015ftirip<\/strong> do\u011fru formatta \u00e7al\u0131\u015ft\u0131rmal\u0131y\u0131z.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bunun i\u00e7in <strong><code>$(...)<\/code><\/strong> komut dizisini kullanabiliriz.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00c7\u00f6z\u00fcm:<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u015eu \u015fekilde bir komut kullanabilirsiniz:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code><strong>docker logs -f -n 100 $(docker ps | grep containername | grep -oP '([0-9a-f]+)' | head -n 1 | cut -c 1-5)<br><\/strong><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">A\u00e7\u0131klama:<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong><code>docker ps | grep containername<\/code><\/strong>: Docker konteyner listesini al\u0131p, <code>containername<\/code> ile e\u015fle\u015fen konteynerleri filtreler.<\/li>\n\n\n\n<li><strong><code>grep -oP '([0-9a-f]+)'<\/code><\/strong>: Her konteynerin ID&#8217;sini al\u0131r.<\/li>\n\n\n\n<li><strong><code>head -n 1<\/code><\/strong>: \u0130lk e\u015fle\u015fmeyi se\u00e7er.<\/li>\n\n\n\n<li><strong><code>cut -c 1-5<\/code><\/strong>: \u0130lk 5 karakteri al\u0131r.<\/li>\n\n\n\n<li><strong><code>$(...)<\/code><\/strong>: Bu k\u0131sm\u0131 kullanarak, t\u00fcm bu komutlar\u0131n \u00e7\u0131kt\u0131s\u0131n\u0131 <code>docker logs -f -n 100<\/code> komutunun arg\u00fcman\u0131 olarak ge\u00e7irirsin.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Bu komut, <strong>dinamik olarak<\/strong> konteyner ID&#8217;sinin ilk 5 karakterini al\u0131r ve <strong><code>docker logs<\/code><\/strong> komutuna ge\u00e7irir.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00d6nemli Notlar:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ID&#8217;nin benzersizli\u011fi<\/strong>: Docker container ID&#8217;sinin ilk 5 karakteri genellikle yeterlidir, \u00e7\u00fcnk\u00fc ID&#8217;ler benzersizdir. Ancak, e\u011fer konteyner adlar\u0131nda benzerlik varsa, bu durumda <code>grep<\/code> komutunun do\u011fru konteyneri bulmas\u0131n\u0131 sa\u011flamak i\u00e7in daha dikkatli olman\u0131z gerekebilir.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Bu komut \u00e7al\u0131\u015ft\u0131\u011f\u0131nda, belirtti\u011fin konteynerin loglar\u0131n\u0131 g\u00f6rmeye ba\u015flamal\u0131s\u0131n\u0131z.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ben mesela her defas\u0131nda bu kadar komutu tekrar tekrar yazmak yerine basit bir .sh dosyas\u0131 yaratt\u0131m. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">.\/komut.sh konteyneradi<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131mda istedi\u011fim \u00e7\u0131kt\u0131y\u0131 yani loglar\u0131 alabiliyorum.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Payla\u015ft\u0131\u011f\u0131m kod par\u00e7ac\u0131\u011f\u0131n\u0131 inceledi\u011finde ne kadar geli\u015ftirebilece\u011finize inanamayacaks\u0131n\u0131z.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/themelic\/grep_regex.git\">https:\/\/github.com\/themelic\/grep_regex.git<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bu arada ihtiyac\u0131n\u0131z olabilece\u011fini d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcm bir linki de payla\u015f\u0131yorum ; bu linkten bulmak istedi\u011finiz kodun regex&#8217;i ni hesaplay\u0131p veren \u00e7ok ba\u015far\u0131l\u0131 bir site :<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/regex-generator.olafneumann.org\/?\">https:\/\/regex-generator.olafneumann.org\/?<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ben Grep komutlar\u0131n\u0131 Docker komutlar\u0131n\u0131 kullan\u0131rken \u00e7ok kullan\u0131yorum bu y\u00fczden sizinde ihtiyac\u0131n\u0131 kar\u015f\u0131layaca\u011f\u0131n\u0131 d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcm bu kullan\u0131m \u015feklini Docker \u00f6rnekleri ile size iletmeye \u00e7al\u0131\u015faca\u011f\u0131m. Bug\u00fcne kadar okuduysan\u0131z yaz\u0131l\u0131r\u0131m olduk\u00e7a basit bir anlat\u0131m i\u00e7erisinde olur ve olabildi\u011fince ba\u015flang\u0131\u00e7 seviyesinde tutmaya \u00e7al\u0131\u015f\u0131r\u0131m. Daha \u00fcst d\u00fczey bilgiler i\u00e7in bu y\u00fczden kendi ara\u015ft\u0131rman\u0131z\u0131 yapman\u0131z gerekebilir&#8230;.<\/p>\n","protected":false},"author":1,"featured_media":812,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[384,1,31,54,4,330],"tags":[423,427,385,408,422,425,421],"class_list":["post-871","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-docker","category-genel","category-linux","category-programala-dilleri-ve-programlamaya-giris","category-sorun-cozumleri","category-yapay-zeka","tag-awk","tag-cut","tag-docker","tag-docker-logs","tag-grep","tag-perl-regex","tag-regex"],"_links":{"self":[{"href":"https:\/\/melic.com\/wp1\/wp-json\/wp\/v2\/posts\/871","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/melic.com\/wp1\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/melic.com\/wp1\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/melic.com\/wp1\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/melic.com\/wp1\/wp-json\/wp\/v2\/comments?post=871"}],"version-history":[{"count":1,"href":"https:\/\/melic.com\/wp1\/wp-json\/wp\/v2\/posts\/871\/revisions"}],"predecessor-version":[{"id":872,"href":"https:\/\/melic.com\/wp1\/wp-json\/wp\/v2\/posts\/871\/revisions\/872"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/melic.com\/wp1\/wp-json\/wp\/v2\/media\/812"}],"wp:attachment":[{"href":"https:\/\/melic.com\/wp1\/wp-json\/wp\/v2\/media?parent=871"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/melic.com\/wp1\/wp-json\/wp\/v2\/categories?post=871"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/melic.com\/wp1\/wp-json\/wp\/v2\/tags?post=871"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}