Linux’ta bir metin akışını değiştirmek için gösterişsiz bir yönteme mi ihtiyacınız var? Girilen metni değiştirirken, kaldırırken, birleştirirken ve sıkıştırırken size zaman kazandırabilecek tr komutundan başka bir yere bakmayın. Bu şekilde yapılır.
tr Komutu Nedir?
Linux tr
komut, istenmeyen karakterleri metin akışlarından ayıklamak ve diğer düzgün manipülasyon hileleri için hızlı ve basit bir yardımcı programdır. Adını “translate” kelimesinden alır ve tr
kökleri Unix geleneğinde derinlere uzanır.
Hepimizin bildiği gibi Linux, Unix’in açık kaynaklı bir yeniden yazımıdır. Karışıma kendi malzemelerini de katıyor. Bayt bayt bir klon değildir, ancak tasarım ilkelerinin ve mühendislik yönetiminin çoğunu Unix işletim sisteminden aldığı açıktır.
Şimdiye kadar yalnızca iki Linux dağıtımının POSIX uyumlu olduğu onaylanmış ve resmi olarak Unix’in uygulamaları olarak kabul edildikleri onaylanmıştır—EulerOS ve Inspur K-UX—Linux, iş dünyasında neredeyse tamamen Unix’in yerini almıştır.
Tüm Linux dağıtımları, en azından temel hizmetlerinde, Unix felsefesine bağlıdır. Unix felsefesi, Unix öncülerinin yeni işletim sistemleri için sahip oldukları vizyonu özetlemektedir. Genellikle “Bir şeyi iyi yapan programlar yazın” şeklinde yorumlanır. Ama bundan daha fazlası var.
En güçlü yeniliklerden biri, programların diğer programlara girdi olarak kullanılabilecek çıktılar üretmesi gerektiğiydi. Bir programdan gelen çıktı akışını sıradaki bir sonraki programa giriş akışı olarak kullanarak, komut satırı yardımcı programlarını birlikte zincirleme bağlama yeteneği son derece güçlüdür.
Bazen, sıradaki bir sonraki programa ulaşmadan önce bir programın çıktısında ince ayar yapmak veya ince ayar yapmak isteyebilirsiniz. Ya da belki girdilerinizi bir Linux komut satırı aracından almıyorsunuz, özel ihtiyaçlarınız göz önünde bulundurularak oluşturulmamış bir dosyadan metin akışı yapıyorsunuz.
burası tr
kendine gelir. Çıkış akışını üretmek için giriş akışında bir dizi basit dönüşüm gerçekleştirmenize izin verir. Bu çıktı akışı bir dosyaya yeniden yönlendirilebilir, başka bir Linux programına ve hatta başka bir örneğine beslenebilir. tr
akışa uygulanan çoklu dönüşümlere sahip olmak.
Karakterleri Değiştirme
bu tr
komut, giriş akışında kurallara göre çalışır. Herhangi bir komut satırı seçeneği olmadan kullanılır, varsayılan eylem tr
giriş akışındaki karakterleri diğer karakterlerle değiştirmektir.
komutları tr
genellikle iki karakter kümesi gerektirir. İlk set, giriş akışında bulunursa değiştirilecek karakterleri tutar. İkinci set, değiştirilecekleri karakterleri tutar.
Bunun çalışma şekli, birinci setteki ilk karakterin tekrarı, ikinci setteki ilk karakterle değiştirilecektir. Birinci kümedeki ikinci karakterin tekrarı, ikinci kümedeki ikinci karakterle değiştirilir ve bu böyle devam eder.
Bu örnek, giriş akışında “c” harfini arayacaktır. tr
ve her geçtiği yeri “z” harfiyle değiştirin. Dikkat tr
büyük/küçük harfe duyarlıdır.
kullanıyoruz echo
içine biraz metin itmek için tr
.
echo abcdefabc | tr 'c' 'z'
Tüm “c” oluşumları “z” ile değiştirilir ve yeni dizi terminal penceresine yazılır.
Bu kez “a” ve “c” olmak üzere iki harf arayacağız. “ac” aramadığımıza dikkat edin. “a”yı arıyoruz, sonra “c”yi arıyoruz. Herhangi bir “a” kelimesini “x” ile ve “c” kelimesini “z” ile değiştireceğiz.
echo abcdefabc | tr 'ac' 'xz'
Bunun çalışması için her iki sette de aynı sayıda karaktere sahip olmanız gerekir. Bunu yapmazsanız, öngörülebilir, ancak muhtemelen istenmeyen davranışlarla karşılaşacaksınız.
echo 'call me Ishmael.' | tr 'abcdjklm' '123'
Birinci sette ikinci settekinden daha fazla karakter var. “d” ila “m” harflerinin ikinci sette karşılık gelen karakteri yoktur. Yine de değiştirilecekler ama hepsi ikinci setteki son karakterle değiştirilecek.
Bunun bazı durumlarda yararlı olması hemen hemen olasıdır, ancak bunu önlemek istiyorsanız -t
(kes) seçeneği. Bu, yalnızca birinci kümede yer alan ve ikinci kümede eşleşen bir karaktere sahip karakterleri değiştirir.
echo 'call me Ishmael.' | tr -t 'abcdjklm' '123'
Aralıkları ve Belirteçleri Kullanma
Set one ve set two karakter aralıkları içerebilir. Örneğin, [a-z]
tüm küçük harfleri temsil eder ve [A-Z]
tüm büyük harfleri temsil eder. Bunu bir metin akışının durumunu değiştirmek için kullanabiliriz.
Bu, giriş akışını büyük harfe dönüştürür.
echo "How-To Geek" | tr '[a-z]' '[A-Z]'
Durumu diğer yöne çevirmek için aynı komutu kullanabiliriz ancak komut satırında büyük ve küçük harf aralıkları değiştirilir.
echo "How-To Geek" | tr '[A-Z]' '[a-z]'
Eşleştirmek isteyebileceğimiz bazı yaygın durumlar için kullanabileceğimiz belirteçler var.
- [:alnum:]: Harfler ve rakamlar.
- [:alpha:]: Sadece mektuplar.
- [:digit:]: Yalnızca rakamlar.
- [:blank:]: Sekmeler ve boşluklar.
- [:space:]: Yeni satır karakterleri dahil tüm boşluklar.
- [:graph:]: Semboller dahil tüm karakterler, ancak boşluklar hariç.
- [:print:]: Boşluklar dahil semboller dahil tüm karakterler.
- [:punct:]: Tüm noktalama işaretleri.
- [:lower:]: Küçük harfler.
- [:upper:]: Büyük harfler.
Belirteçleri kullanarak küçük harften büyük harfe ve büyük harften küçük harfe dönüştürmelerimizi aynı kolaylıkla gerçekleştirebiliriz.
echo "How-To Geek" | tr '[:lower:]' '[:upper:]'
echo "How-To Geek" | tr '[:upper:]' '[:lower:]'
Eşleşmeleri Ters Çevirmek
bu -c
(tamamlayıcı) seçeneği, ilk kümedekiler dışındaki tüm karakterlerle eşleşir. Bu komut “c” harfi dışındaki her şeyi kısa çizgiye dönüştürür” -
“.
echo abcdefc | tr -c 'c' '-'
Bu komut ilk kümeye “a” harfini ekler. “a” veya “c” dışındaki herhangi bir şey kısa çizgiye dönüştürülür ” -
” karakter.
echo abcdefc | tr -c 'ac' '-'
Karakterleri Silme ve Sıkıştırma
Kullanabiliriz tr
karakterleri değiştirmeden tamamen kaldırmak için.
Bu komut, -d
(delete) seçeneği, giriş akışından herhangi bir “a”, “d” veya “f” oluşumunu kaldırmak için.
echo abcdefc | tr -d 'adf'
Bu, komut satırında iki değil, yalnızca bir karakter setimizin olduğu bir örnektir.
Bir diğeri, kullandığımız zaman -s
(sıkma-tekrarlar) seçeneği. Bu seçenek, tekrarlanan karakterleri tek bir karaktere indirger.
Bu örnek, boşluk karakterinin tekrarlanan dizilerini tek bir boşluğa indirecektir.
echo "a b c de f c" | tr -s '[:blank:]'
biraz kafa karıştırıcı [:blank:]
belirteç boşluk karakterini temsil eder ve [:space:]
belirteç, sekmeler ve yeni satır karakterleri dahil olmak üzere tüm boşluk biçimlerini temsil eder.
Bu durumda, değiştirebiliriz [:blank:]
ile [:space:]
ve aynı sonucu elde edin.
echo "a b c de f c" | tr -s '[:space:]'
Karakterleri Silme
arasındaki farklar [:blank:]
Ve [:space:]
karakterleri sildiğimizde görünür hale gelir. Bunu yapmak için, -d
(sil) seçeneğini seçin ve bir dizi karakter sağlayın. tr
giriş akışında arayacaktır. Bulduğu her şey kaldırılır.
echo "a b c de f c" | tr -d '[:blank:]'
Boşluklar silinir. Çıkış akışı terminal penceresine yazıldıktan sonra yeni bir satır aldığımızı unutmayın. Bu komutu tekrar edersek ve kullanırsak [:space:]
boş yerine farklı bir sonuç elde ederiz.
echo "a b c de f c" | tr -d '[:blank:]'
Bu sefer çıktıdan sonra yeni bir satır başlatmıyoruz, komut istemi tam onun karşısına çıkıyor. Bunun nedeni ise [:space:]
yeni satırlar içerir. Boşluklar, sekmeler ve yeni satır karakterleri giriş akışından kaldırılır.
Elbette gerçek bir boşluk karakteri de kullanabilirsiniz.
echo "a b c de f c" | tr -d ' '
Rakamları da kolayca silebiliriz.
echo abcd123efg | tr -d '[:digit:]'
birleştirerek -c
(tamamlayıcı) ve -d
(delete) seçenekleri ile rakamlar dışında her şeyi silebiliriz.
echo abcd123efg | tr -cd '[:digit:]'
Rakamlar dışındaki her şeyin tüm harfler anlamına geldiğini unutmayın, Ve tüm boşluklar, yani bir kez daha sonlandırıcı yeni satırı kaybediyoruz.
Çizgileri Birleştirme ve Ayırma
Boşlukların yerine yeni satır karakterlerini koyarsak, bir metin satırını bölebilir ve her kelimeyi kendi satırına yerleştirebiliriz.
echo 'one two three four' | tr ' ' '\n'
Kelimeleri ayıran sınırlayıcıyı da değiştirebiliriz. Bu komut iki nokta üst üste yerine geçer ” :
” boşluklar için.
echo 'one two three four' | tr ' ' ':'
Ayırıcının kullanımda olduğunu bulabilir ve onu yeni satır karakterleriyle değiştirerek okunması zor metni yönetimi daha kolay çıktılara ayırabiliriz.
Yol ortam değişkeni, birçok dizin yolundan oluşan uzun bir dizedir. Bir kolon ” :
” her yolu ayırır. Onları yeni satır karakterleriyle değiştireceğiz.
echo $PATH
echo $PATH | tr ":" "\n"
Görsel olarak ayrıştırmak çok daha kolay.
Tek bir satıra yeniden biçimlendirmek istediğimiz çıktımız varsa, onu da yapabiliriz. “lines.txt” dosyası, her satırında bir sözcük bulunan bazı metinler içerir. Bunu besleyeceğiz tr
ve tek bir satıra dönüştürün.
cat files.txt
cat lines.txt | tr '\n' ' '
Borularla tr Kullanma
çıktısını kullanabiliriz tr
başka bir program için girdi olarak, hatta tr
kendisi.
Bu komut kullanır tr
dört kere.
- İlk
tr
girişteki tüm kısa çizgileri “-” siler. - İkinci
tr
tekrarlanan boşlukları tek boşluklara sıkıştırır. - Üçüncü
tr
boşlukları alt çizgi “_” karakterleriyle değiştirir. - Dördüncü ve son
tr
dizeyi küçük harfe dönüştürür.
echo "Mangled FiLE-nAMe.txt" | tr -d '-' | tr -s ' ' | tr ' ' '_' | tr '[:upper:]' '[:lower:]'
İLGİLİ: Linux’ta Borular Nasıl Kullanılır?
Basit olduğu kadar basit
bu tr
komut harika çünkü basit. Öğrenecek ve hatırlayacak çok şey yok. Ancak basitliği de onun çöküşü olabilir.
Hata yapmayın, sık sık bunu bulacaksınız tr
gibi daha karmaşık araçlara ulaşmak zorunda kalmadan ihtiyacınız olanı yapalım. sed
.
Ancak, bir şeyler yapmakta zorlanıyorsanız tr
ve kendinizi uzun papatya komut zincirleri oluştururken buluyorsunuz, muhtemelen kullanmalısınız sed
.