kesim
The kesim program, bir satırdan metnin bir bölümünü çıkarmak ve çıkarılan bölümü standart çıktıya çıkarmak için kullanılır. Birden çok dosya argümanını veya standart girdiden girdiyi kabul edebilir.
Çıkarılacak satırın bölümünün belirtilmesi biraz gariptir ve aşağıdaki seçenekler kullanılarak belirtilir:
Tablo 20-3: Seçim Seçeneklerini Kes
Seçenek Açıklama
Seçenek Açıklama
-c karakter_listesi tarafından tanımlanan çizginin bir kısmını çıkarın. karakter_listesi. Liste, bir veya daha fazla virgülle ayrılmış sayısal aralıktan oluşabilir.
![]()
-f alan Listesi tarafından tanımlanan şekilde satırdan bir veya daha fazla alan ayıklayın.
alan Listesi. Liste, virgülle ayrılmış bir veya daha fazla alan veya alan aralığı içerebilir.
![]()
-d deli_char Ne zaman -f belirtilir, kullanın deli_char alan sınırlayıcı karakter olarak. Varsayılan olarak, alanlar tek bir sekme karakteriyle ayrılmalıdır.
![]()
--complement Bu kısımlar hariç tüm metin satırını ayıklayın
tarafından belirtilen -c ve / veya -f.
![]()
Gördüğümüz gibi, yol kesim metinleri ayıklar oldukça esnek değildir. kesim doğrudan insanlar tarafından yazılan metinler yerine, diğer programlar tarafından üretilen dosyalardan metin çıkarmak için en iyi şekilde kullanılır. bizimkilere bir göz atacağız dağıtımlar.txt bizim için iyi bir örnek olacak kadar “temiz” olup olmadığını görmek için dosya kesim örnekler. eğer kullanırsak kedi ile -A seçeneği, dosyanın sekmeyle ayrılmış alan gereksinimlerimizi karşılayıp karşılamadığını görebiliriz:
[ben@linuxbox ~]$ cat -A dağıtımları.txt
SUSE^I10.2^I12/07/2006$
Fedora^I10^I11/25/2008$ SUSE^I11.0^I06/19/2008$
Ubuntu^I8.04^I04/24/2008$ Fedora^I8^I11/08/2007$ SUSE^I10.3^I10/04/2007$
Ubuntu^I6.10^I10/26/2006$ Fedora^I7^I05/31/2007$ Ubuntu^I7.10^I10/18/2007$ Ubuntu^I7.04^I04/19/2007$
[ben@linuxbox ~]$ cat -A dağıtımları.txt
SUSE^I10.2^I12/07/2006$
Fedora^I10^I11/25/2008$ SUSE^I11.0^I06/19/2008$
Ubuntu^I8.04^I04/24/2008$ Fedora^I8^I11/08/2007$ SUSE^I10.3^I10/04/2007$
Ubuntu^I6.10^I10/26/2006$ Fedora^I7^I05/31/2007$ Ubuntu^I7.10^I10/18/2007$ Ubuntu^I7.04^I04/19/2007$
SUSE^I10.1^I05/11/2006$
Fedora^I6^I10/24/2006$ Fedora^I9^I05/13/2008$ Ubuntu^I6.06^I06/01/2006$ Ubuntu^I8.10^I10/30/2008$ Fedora^I5^I03/20/2006$
SUSE^I10.1^I05/11/2006$
Fedora^I6^I10/24/2006$ Fedora^I9^I05/13/2008$ Ubuntu^I6.06^I06/01/2006$ Ubuntu^I8.10^I10/30/2008$ Fedora^I5^I03/20/2006$
Güzel görünüyor. Gömülü boşluk yok, alanlar arasında yalnızca tek sekme karakterleri. Dosya boşluklar yerine sekmeler kullandığından, -f bir alan çıkarma seçeneği:
[ben@linuxbox ~]$ cut -f 3 dağıtımlar.txt
12/07/2006
11/25/2008
06/19/2008
04/24/2008
11/08/2007
10/04/2007
10/26/2006
05/31/2007
10/18/2007
04/19/2007
05/11/2006
10/24/2006
05/13/2008
06/01/2006
10/30/2008
03/20/2006
[ben@linuxbox ~]$ cut -f 3 dağıtımlar.txt
12/07/2006
11/25/2008
06/19/2008
04/24/2008
11/08/2007
10/04/2007
10/26/2006
05/31/2007
10/18/2007
04/19/2007
05/11/2006
10/24/2006
05/13/2008
06/01/2006
10/30/2008
03/20/2006
Çünkü bizim dağıtımlar dosya sekmeyle ayrılmış, kullanmak en iyisidir kesim karakterler yerine alanları çıkarmak için. Bunun nedeni, bir dosya sekmeyle sınırlandırıldığında, her satırın aynı sayıda karakter içermesinin olası olmamasıdır, bu da satır içindeki karakter konumlarını hesaplamayı zorlaştırır veya imkansız hale getirir. Ancak yukarıdaki örneğimizde, neyse ki aynı uzunlukta verileri içeren bir alan çıkardık, böylece her satırdan yılı çıkararak karakter çıkarmanın nasıl çalıştığını gösterebiliriz:
[ben@linuxbox ~]$ cut -f 3 dağıtımlar.txt | kesme -c 7-10
2006
2008
2008
2008
2007
2007
2006
2007
[ben@linuxbox ~]$ cut -f 3 dağıtımlar.txt | kesme -c 7-10
2006
2008
2008
2008
2007
2007
2006
2007
2007
2007
2006
2006
2008
2006
2008
2006
2007
2007
2006
2006
2008
2006
2008
2006

Koşarak kesim listemizde ikinci kez, tarih alanımızda yıla karşılık gelen 7 ile 10 arasındaki karakter konumlarını çıkarabiliyoruz. NS 7-10 gösterim, bir aralığın örneğidir. NS kesim man sayfası, aralıkların nasıl belirlenebileceğinin tam bir açıklamasını içerir.
Genişleyen Sekmeler
nen dağıtımlar.txt dosya, alanları çıkarmak için ideal olarak biçimlendirilmiştir. kesim. Ama ya tamamen manipüle edilebilecek bir dosya istersek? kesim alanlar yerine karakterlere göre mi? Bu, dosya içindeki sekme karakterlerini karşılık gelen boşluk sayısıyla değiştirmemizi gerektirir. Neyse ki GNU Coreutils paketi bunun için bir araç içeriyor. Adlandırılmış genişletmek, bu program bir veya daha fazla dosya argümanını veya standart girdiyi kabul eder ve değiştirilmiş metni standart çıktıya verir.
işlemlerimizi yaparsak dağıtımlar.txt ile dosya genişletmek, kullanabiliriz kes -c dosyadan herhangi bir karakter aralığını çıkarmak için. Örneğin, dosyayı genişleterek ve kesim her karakteri yirmi üçüncü konumdan satırın sonuna kadar çıkarmak için:
[ben@linuxbox ~]$ distros.txt dosyasını genişlet | kes -c 23-
Coreutils ayrıca şunları sağlar: genişletmek boşluklar için sekmeleri değiştirmek için program.
Alanlarla çalışırken sekme karakteri yerine farklı bir alan sınırlayıcı belirtmek mümkündür. Burada ilk alanı / Etc / passwd Dosya:
[ben@linuxbox ~]$ cut -d ':' -f 1 /etc/passwd | kafa
kök arka plan programı
[ben@linuxbox ~]$ cut -d ':' -f 1 /etc/passwd | kafa
kök arka plan programı
bin sys senkronizasyon oyunları adam lp posta haberleri
bin sys senkronizasyon oyunları adam lp posta haberleri
Kullanma -d seçeneği, iki nokta üst üste karakterini alan sınırlayıcı olarak belirtebiliriz.
Dökümanlar