Linux örneklerini kesin. Kes - Ah evet Linux Wiki

Tanım

Kes komutu, bir dosyanın her satırından gerekli parçayı seçmenize (tüm satırlar için aynı kuralı kullanarak) ve seçimi görüntüleme ekranında göstermenize olanak tanır.

Komutun üç ana seçeneği vardır:

  • -b - seçim nesnesi bayt olduğunda;
  • -с - seçilen nesne semboller olduğunda;
  • -f - seçim nesnesi metin biçimlendirme öğeleri (sütunlar, sütunlar vb.) olduğunda.

Dikkat: -c, -b ve -f seçenekleri yalnızca ayrı ayrı kullanılabilir.

Ana ayarlar

Seçenek -c

Örneğin, /etc/shells dosyasını ele alalım, bütünüyle şöyle görünüyor:

/bin/bash /bin/tcsh /bin/csh /bin/ash /bin/ksh /bin/zsh

Şimdi şu komutu kullanalım:

$ kesim -c 1.5 /etc/shells // // // // // //

Bu örnekte -c seçeneği, seçimin karakter olacağı anlamına gelir; 1 ve 5 sayıları, satırın birinci ve beşinci karakterlerini seçtiğimiz (1'den başlayarak sayarak) ve dosya içeriğinin geri kalanının göz ardı edildiği anlamına gelir.

Karakterleri seri numaralarına göre değil aralıklara göre seçebilirsiniz:

Kes -c 1-5 /etc/shells /bin/ /bin/ /bin/ /bin/ /bin/ /bin/

Bu durumda 1 ila 5 (dahil) aralığındaki karakterleri seçtik.

Virgülle ayrılmış birden çok aralık belirtebilirsiniz:

Kes -c 1-5,8-9 /etc/shells /bin/sh /bin/sh /bin/h /bin/h /bin/h /bin/h

İlk üç örnek tamamen gösterim amaçlıdır ve pratik bir anlamı yoktur. Aşağıdaki örnek biraz anlamlı olabilir:

$ kes -c 6- /etc/shells bash tcsh csh ash ksh zsh

Burada sistemde mevcut mermilerin bir listesini aldık. Bunu yapmak için, komutu belirtilen karakterden satırın sonuna kadar satırların tüm içeriğinin çıktısını almaya zorlayan aralığın sağ sınırını belirtmedik. Sol tarafa bir çizgi bırakabilirsiniz, ardından seçim satırın başından belirtilen karaktere kadar ilerleyecektir.

Umarım -c seçeneği tamamen açıktır, bir sonrakine geçebilirsiniz.

Seçenek -b

Hem bayt örneklemeyi belirleme yöntemi hem de sonuçlar açısından önceki seçeneğe çok benzer çünkü çoğu durumda bir bayt bir karakteri tanımlar.

Cut -b 1-6 /etc/shells /bin/b /bin/t /bin/c /bin/a /bin/k /bin/z

/etc/shells dosyasının her satırından ilk 6 baytı seçtik.

Tıpkı -c seçeneğinde olduğu gibi, yöntemleri kullanabilirsiniz. örnekler n,m; -N; ve n-. Geriye yalnızca sekme karakterlerinin ve geri tuşunun (bir karakter geri gitme ve onu silme) diğer karakterler gibi ele alındığını eklemek kalır - bunlar bir bayt kaplar. (Ulusal kodlamalara kefil olamam).

Seçenek -f

Bu seçeneği seçmenin amacı, programın manasında kafa karıştırıcı olan o çok gizemli "alanlardır". Basit olduğu ortaya çıktı. Sekmelerle ayrılmış metin sütunlarını, sütunları veya başka herhangi bir şeyi seçiyoruz. Bu tür dosyaları hiç görmediğim için bunları özellikle deneyler için oluşturmak zorunda kaldım. Tab.txt dosyasının içeriği şunlardır:

Qwer tyui op asdf ghjk llll zxcv bnm, ....

Ve işte komut:

$ kes -f 1,2 tab.txt qwer tyui asdf ghjk zxcv bnm,

Her şey beklendiği gibi, ilk iki sütun seçildi. Başka bir örnek:

Kes -f 2- tab.txt tyui op ghjk llll bnm, ....

Genel olarak, şemanın sadece sütunlarla aynı olduğu açıktır. Soru farklı: İşlemek için sekmelerle ayrılmış sütunlara sahip bu tür dosyaları nereden alabilirim?

Neyse ki, -f seçeneğiyle birlikte çalışacak şekilde tasarlanmış ve sekme karakterleri dışındaki metin sınırlayıcıları anlayan bir -d seçeneği vardır. /etc dizini her türlü sınırlayıcıyla ayrılmış veri sütunlarını içeren dosyalarla doludur; Tek sorun örneklerin oldukça uzun olmasıdır. /etc/group dosyasından ilk on satırı alıp group10.txt dosyası oluşturacağım.

Cut -f 1- -d: group10.txt root::0:root bin::1:root,bin,daemon daemon::2:root,bin,daemon sys::3:root,bin,adm adm:: 4:root,adm,daemon tty::5: disk:!:6:root,adm,haldaemon,ya,alex lp::7:lp,ya,alex mem::8: kmem::9:

Bu örnekte -f seçeneği, ilkinden sonuncuya kadar tüm sütunları seçmesini söyler ve -d seçeneği -d sınırlayıcısı olan karakteri belirtir: sınırlayıcı iki nokta üst üstedir. Ekranın üstünde group10.txt dosyasının tamamı bulunmaktadır.

Cut -f 1,3 -d: group10.txt root:0 bin:1 daemon:2 sys:3 adm:4 tty:5 disk:6 lp:7 mem:8 kmem:9

Ve şimdi birinci ve üçüncü sütunları seçtik, yani her grubun kimlik numarasını öğrendik. Aksi takdirde, bir nesneyi seçme kuralları diğer seçeneklerle aynıdır. Sütun sınırlayıcıları elbette iki nokta üst üste dışındaki karakterler olabilir. -d seçeneği kullanılarak belirtilmeleri gerekir<символ>. Fazlası var görsel yol-d seçeneğini kullanarak. Az önce açıklanan yapı yerine (-d<символ>) --delim= yaz<символ>, bu boşluk kullanmaktan daha güvenilir görünüyor.

Küçük bir numara. Birçok dosyada ayırıcı karakter bir boşluktur veya bir satırdaki birkaç boşluktur (örneğin, /etc/fstab dosyası). Bu tür dosyalar için ayırıcıyı belirtmek amacıyla, alanı tırnak işaretleri (tek veya çift) içine almanız gerekir; ancak o zaman program sınırlayıcının bir boşluk olduğunu anlayacaktır:

Kes -f 1-21 -d " " /etc/fstab /dev/hda7 takas /dev/hdb5 takas /dev/hdb1 / devpts /dev/pts devpts proc /proc usbfs /proc/bus/usb /dev/hda1 / mnt/win_c /dev/hda5 /mnt/win_d /dev/fd0 /mnt/floppy

Sınırlayıcı olarak birden fazla boşluğun nasıl belirtileceği hala bilinmiyor.

Seçenekler

-s seçeneği -f seçeneğiyle birlikte kullanılır ve ona sınırlayıcı karakterler içermeyen satırların görüntülenmemesini söyler. Bu benim için bile açık.

Seçenek -n

-n seçeneği -b seçeneğiyle birlikte kullanılır (örnek nesne bayt olduğunda). Bu seçenek önce yazılır ve komutun çok baytlı karakterleri bölmesini engeller. Başka bir deyişle, bir sembol birden fazla baytla yazılmışsa ve bir örneği belirtirken yanlışlıkla böyle bir çok baytlı sembolle karşılaşırsak, program çıktısında programın var olduğunu gösteren soru işaretleri veya kareler görünecektir. bu sembolü tam olarak saymadım ve nasıl yorumlayacağımı bilmiyorum. Örneğin:

-b 1-5 rus.txt yts'yi kes? ah? yat mı?

(UTF-8 kodlamasındaki Kiril karakterler 2 bayttan oluşur). -n seçeneğini eklediğinizde komut, çok baytlı bir karakterin bir kısmını okumaya çalışmayı bırakacaktır:

Cut -n -b 1-5 rus.txt yts fy yat

--tamamlayıcı seçeneği

Cut komutunun GNU Coreutils sürümlerinde bulunur. Ancak manas'ta nadiren bulunur. Bu seçenek -b, -c ve -f seçenekleriyle birlikte kullanılır. Bu seçenek, seçimi diğer tüm seçim nesneleri ile tamamlayacaktır. Başka bir deyişle, belirttiğiniz nesneler komut çıktısında görünmeyecek, ancak diğerleri görünecektir. Örneğin:

Cut -f 1 --complement tab.txt tyui op ghjk llll bnm, ....

Belirtilen ilk sütun görünmedi, ancak kalan ikisi komut çıktısında göründü. Çok sayıda sütununuz veya metin sütununuz olduğunda ve bir, iki veya üç hariç hepsini yazdırmanız gerektiğinde bu seçenek çok kullanışlıdır.

--help ve --version seçenekleri iyi bilinmektedir ve bunların üzerinde durmayacağım.

Cut komutu ve Kiril karakterler

Bazı en son sürümler programları kes, bazı dağıtımlarda Kiril karakterlerini oldukça iyi işliyor. Diğer dağıtımlardaki diğer sürümler hiç çalışmıyor. Kiril alfabesiyle birkaç örnek vermeye çalıştım ama sonuçlar farklı makinelerde, farklı dağıtımlarda ve farklı versiyonlar komutlar herhangi bir netlik sağlamadan yalnızca okuyucunun kafasını karıştırabilirdi. Bu nedenle genel öneriler: ana dilinizle çalışmayı denemekten korkmayın, işe yaramazsa programın sürümünü güncelleyin, işe yaramazsa farklı bir varsayılan kodlamaya sahip bir dağıtım deneyin.

Sürümler hakkında birkaç kelime

Linux dağıtımlarında çoğunlukla GNU Coreutils'in kesme komutunu bulabilirsiniz. Program geliştirilmekte ve düzenli olarak yeni sürümler çıkmaktadır. En son stabil sürüme sahip olmanızı tavsiye ederim. En son olmayan, açıkçası "hatalı" olan ve örneğin -b ve -c seçenekleri arasında ayrım yapmayan sürümlerle karşılaştım (cut (GNU coreutils) 5.97), ancak böyle olması gerektiğini düşündüm. . Bu nedenle, ilk şüphenizde başka bir dağıtımı (veya LiveCD'yi) deneyin.

Kesim programının özeti

Program uygulanabilir ve normal dosyalarla, yani belirli bir bilgi yapısının satır satır tekrarlandığı dosyalarla (her türlü liste, kontrol listesi, çıktı vb.) etkili bir şekilde çalışır. Satırlara bölünmemiş normal metinlerle nasıl kullanılabileceğini hayal etmek zor. Bir örneği tanımlamak için üç yaklaşıma (baytlar, karakterler ve sütunlar) sahip olmak, hemen hemen her durumda, bir şekilde değil, başka bir şekilde başarıya ulaşmanıza olanak tanır. Komut, boruların bir parçası olarak filtre olarak özellikle yararlı olabilir.


Kes komutu, bir dosyanın her satırından gerekli parçayı seçmenize (tüm satırlar için aynı kuralı kullanarak) ve seçimi görüntüleme ekranında göstermenize olanak tanır.

Komutun üç ana seçeneği vardır:

  • -B- tercih edilen nesne bayt olduğunda;
  • -İle- seçilen nesne semboller olduğunda;
  • -F- tercih edilen nesne metin biçimlendirme öğeleri (sütunlar, sütunlar vb.) olduğunda.

En bariz sembollerle başlayalım (seçenek -c)

Seçenek -c

Örneğin, /etc/shells dosyasını ele alalım, bütünüyle şöyle görünür: /bin/bash /bin/tcsh /bin/csh /bin/ash /bin/ksh /bin/zsh

Şimdi şu komutu kullanalım:

$ kesim -c 1.5 /etc/shells // // // // // //

Bu örnekte -c seçeneği, seçimin karakter olacağı anlamına gelir; 1,5, 1 ve 5 karakterlerini seçtiğimiz (1'den başlayarak sayarak) ve dosyanın diğer tüm içeriklerinin göz ardı edildiği anlamına gelir.

Karakterleri seri numaralarına göre değil aralıklara göre seçebilirsiniz:

$ kes -c 1-5 /etc/kabuklar /bin/ /bin/ /bin/ /bin/ /bin/ /bin/

Bu durumda 1 ila 5 (dahil) aralığındaki karakterleri seçtik.

Virgülle ayrılmış birden çok aralık belirtebilirsiniz:

~$ kesim -c 1-5,8-9 /etc/shells /bin/sh /bin/sh /bin/h /bin/h /bin/h /bin/h

İlk üç örnek tamamen gösterim amaçlıdır ve pratik bir anlamı yoktur. Aşağıdaki örnek biraz anlamlı olabilir:

$ kes -c 6- /etc/shells bash tcsh csh ash ksh zsh

Burada sistemde mevcut mermilerin bir listesini aldık. Bunu yapmak için, komutu belirtilen karakterden satırın sonuna kadar satırların tüm içeriğinin çıktısını almaya zorlayan aralığın sağ sınırını belirtmedik. Sol tarafa bir çizgi bırakabilirsiniz, ardından seçim satırın başından belirtilen karaktere kadar ilerleyecektir.

Tüm bu örneklerin her zaman Rusça karakterlerle çalışmaması ilginçtir (en azından UTF-8 kodlamasında) - bir tür garip adım adım çıktı üretirler:

$ kesim -c 1- rus.txt ytsukengshschzkh fyvaproldzheyo yachsmithby.yoyo

Bu rus.txt dosyasının tam metnidir. Program doğru çalıştı.

$ kes -c 1-5 rus.txt yts? ah? yat mı? $

İşte işlerin tuhaflaştığı yer burası. Bir sonraki komut satırı isteminin bile merdivenlerden aşağı inmesi komik. Ancak Ctrl+Alt+F2 tuşlarına basılarak çağrılan "gerçek" konsolda aynı komutun çıktısı aşağı yukarı düzgün görünüyordu:

$ kesim -c 1-5 rus.txt yts fy yat

Çok sayıda deneyde ortaya çıktığı gibi, UTF-8 kodlamasındaki Kiril karakterleri iki bayttan oluşur, bu nedenle çift sayısal değerler girmeniz gerekir. Örneğin, önceki komutta 5'i 6 (veya başka bir çift sayı) ile değiştirirseniz, her şey konsol öykünücüsünde olması gerektiği gibi olacaktır:

$ kesim -c 1-6 rus.txt ytsu fyv yatlar

Deneyin saflığı için, varsayılan koi-8 kodlamasına sahip olan Knoppix5.1'i başlattım, bu nedenle İngilizce metinle hiçbir fark yok - her harf bir bayt ile temsil edilir:

$ kes -c 1-5 rus.txt yitsuke fywap yachsmi

Bu yüzden ulusal kodlamalara dikkat etmelisiniz!

Umarım -c seçeneği tamamen açıktır, bir sonrakine geçebilirsiniz.

Seçenek -b

Hem bayt örneklemeyi belirleme yöntemi hem de sonuçlar açısından önceki seçeneğe çok benzer çünkü çoğu durumda bir bayt bir karakteri tanımlar. $ kesim -b 1-6 /etc/kabuklar /bin/b /bin/t /bin/c /bin/a /bin/k /bin/z

/etc/shells dosyasının her satırından ilk 6 baytı seçtik.

Tıpkı -c seçeneğinde olduğu gibi, n,m örnekleme yöntemlerini kullanabilirsiniz; -N; ve n-. Geriye sadece sekme karakterlerinin ve geri tuşunun (bir karakter geri gitme ve onu silme) diğer karakterler gibi ele alındığını eklemek kalır - bunlar bir bayt kaplar. (Ulusal kodlamalara kefil olamam).

Seçenek -f

Bu seçeneği seçmenin amacı, önsözde bahsettiğim aynı gizemli “alanlardır”. Basit olduğu ortaya çıktı. Sekmelerle ayrılmış metin sütunlarını, sütunları veya herhangi bir şeyi seçiyoruz. Bu tür dosyaları hiç görmediğim için bunları özellikle deneyler için oluşturmak zorunda kaldım. Tab.txt dosyasının içeriği şunlardır:

Qwer tyui op asdf ghjk llll zxcv bnm, ....

Ve işte komut:

$ kes -f 1,2 tab.txt qwer tyui asdf ghjk zxcv bnm,

Her şey beklendiği gibi, ilk iki sütun seçildi. Başka bir örnek:

$ kes -f 2- tab.txt tyui op ghjk llll bnm, ....

Genel olarak, şemanın sadece sütunlarla aynı olduğu açıktır. Soru farklı: İşlemek için sekmelerle ayrılmış sütunlara sahip bu tür dosyaları nereden alabilirim?

Neyse ki, -f seçeneğiyle birlikte çalışacak şekilde tasarlanmış ve sekme karakterleri dışındaki metin sınırlayıcıları anlayan bir -d seçeneği vardır. /etc dizini her türlü sınırlayıcıyla ayrılmış veri sütunlarını içeren dosyalarla doludur; Tek sorun örneklerin oldukça uzun olmasıdır. /etc/group dosyasından ilk on satırı alıp group10.txt dosyası oluşturacağım.

$ kesim -f 1- -d: group10.txt root::0:root bin::1:root,bin,daemon arka plan programı::2:root,bin,daemon sys::3:root,bin,adm adm: :4:root,adm,daemon tty::5: disk:!:6:root,adm,haldaemon,ya,alex lp::7:lp,ya,alex mem::8: kmem::9:

Bu örnekte -f seçeneği, ilkinden sonuncuya kadar tüm sütunları seçmesini söyler ve -d seçeneği -d sınırlayıcısı olan karakteri belirtir: sınırlayıcı iki nokta üst üstedir. Ekranın üstünde group10.txt dosyasının tamamı bulunmaktadır.

$ kes -f 1,3 -d: grup10.txt kök:0 bin:1 arka plan programı:2 sys:3 adm:4 tty:5 disk:6 lp:7 mem:8 kmem:9

Ve şimdi birinci ve üçüncü sütunları seçtik, yani her grubun kimlik numarasını öğrendik. Aksi takdirde, bir nesneyi seçme kuralları diğer seçeneklerle aynıdır. Sütun sınırlayıcıları elbette iki nokta üst üste dışındaki karakterler olabilir. -d seçeneği kullanılarak belirtilmeleri gerekir<символ>. -d seçeneğini kullanmanın daha görsel bir yolu da var. Az önce açıklanan yapı yerine (-d<символ>) --delim= yaz<символ>, bu boşluk kullanmaktan daha güvenilir görünüyor.

Geriye iki seçenek kaldı: -s ve -n

-s seçeneği -f seçeneğiyle birlikte kullanılır ve ona sınırlayıcı karakterler içermeyen satırların görüntülenmemesini söyler. Bu benim için bile açık.

Kalan Belirsizlikler

-n seçeneği benim tarafımdan tanınmadı. Çok baytlı karakterlerle hiçbir şey yapmamanızı, özellikle de onları bölmemenizi söyler. Bu sembollerin ne olduğunu bilmiyorum, tıpkı kesme komutunun varsayılan olarak onlarla ne yaptığını bilmediğim gibi. Başka bir gizem daha var. Boşluk ise ayırıcı nasıl belirtilir? Yoksa iki veya üç boşluk mu? Bütün denemelerim sonuçsuz kaldı. Belki birisi biliyordur? Bana yazın, adresim yazının başındadır.

Dikkat:-c, -b ve -f seçenekleri yalnızca ayrı ayrı kullanılabilir.

--help ve --version seçenekleri iyi bilinmektedir ve bunların üzerinde durmayacağım.

Kesim programının özeti

Program uygulanabilir ve normal dosyalarla, yani belirli bir bilgi yapısının satır satır tekrarlandığı dosyalarla (her türlü liste, kontrol listesi, çıktı vb.) etkili bir şekilde çalışır. Satırlara bölünmemiş normal metinlerle nasıl kullanılabileceğini hayal etmek zor. Bir örneği tanımlamak için üç yaklaşıma (baytlar, karakterler ve sütunlar) sahip olmak, hemen hemen her durumda, bir şekilde değil, başka bir şekilde başarıya ulaşmanıza olanak tanır. Komut, boruların bir parçası olarak filtre olarak özellikle yararlı olabilir.

Güncelleme: 10/17/2017 tarafından Bilgisayar Umudu

Kesim hakkında

söz dizimini kes

kesmek SEÇENEK... [DOSYA]...

Seçenekler

-B, --bytes=LİSTE Yalnızca baytları seçin LİSTE. LİSTE bir baytı, bir bayt kümesini veya bir bayt aralığını belirtir; aşağıya bakınız.
-C, --karakterler=LİSTE Yalnızca her satırdaki karakterleri şurada belirtildiği gibi seçin: LİSTE. LİSTE bir karakteri, bir karakter kümesini veya bir karakter aralığını belirtir; aşağıya bakınız.
-D, --sınırlayıcı=DELİM karakter kullan DELİM sekme yerine için alan sınırlayıcı
-F, --fields=LİSTE her satırda yalnızca bu alanları seçin; ayrıca sınırlayıcı karakter içermeyen herhangi bir satırı da yazdırır; -S seçeneği belirtilir. LİSTE bir alanı, bir alan kümesini veya bir alan aralığını belirtir; aşağıya bakınız.
-N Bu seçenek göz ardı edilir ancak uyumluluk nedeniyle dahil edilmiştir.
--Tamamlayıcı seçilen bayt, karakter veya alan kümesini tamamlar.
-S, --yalnızca-sınırlanmış sınırlayıcı içermeyen satırları yazdırmayın.
--output-delimiter=SİCİM kullanmak SİCİMçıkış sınırlayıcı dizesi olarak. Varsayılan, giriş sınırlayıcının kullanılmasıdır.
--yardım Bir yardım mesajı görüntüleyin ve çıkın.
--versiyon sürüm bilgilerini çıktılayın ve çıkın.

Kullanım Notları

Çağırırken kesmek, kullan -B, -C, veya -F seçenek ama bunlardan sadece biri.

Eğer hayırsa DOSYA belirtilir, kesmek okur itibaren standart giriş.

Belirtiyorum LİSTE

Her biri LİSTE virgülle ayrılmış bir tam sayıdan, bir tam sayı aralığından veya birden fazla tam sayı aralığından oluşur. Seçilen giriş şu şekilde yazılır: aynısı okunmasını ve tam olarak bir kez çıktıya yazılmasını sağlar. Bir aralık aşağıdakilerden oluşur:

N the N sayılan bayt, karakter veya alan 1 .
N - itibaren N satırın sonuna kadar bayt, karakter veya alan.
N- M itibaren N buna M bayt, karakter veya alan (dahil).
- M ilk andan itibaren M bayt, karakter veya alan.

Örneğin, adında bir dosyanız olduğunu varsayalım. veri.txt aşağıdaki metni içeren:

Bir iki üç dört beş alfa beta gama delta epsilon

Bu örnekte bu kelimelerin her biri boşluklarla değil sekme karakteriyle ayrılmıştır. Sekme karakteri varsayılan sınırlayıcıdır kesmek, bu nedenle varsayılan olarak bir alanı sekmeyle sınırlandırılmış herhangi bir şey olarak kabul eder.

Her satırın yalnızca üçüncü alanını "kesmek" için şu komutu kullanın:

-f 3 veri.txt'yi kes

Üç gama

Bunun yerine her satırın yalnızca ikinciden dördüncüye kadar olan alanını "kesmek" istiyorsanız şu komutu kullanın:

-f 2-4 veri.txt'yi kes

Hangisi aşağıdaki çıktıyı verecektir:

İki üç dört beta gama delta

Her satırın yalnızca birinciden ikinciye ve dördüncüden beşinciye kadar olan alanlarını "kesmek" istiyorsanız (üçüncü alanı atlayarak), şu komutu kullanın:

-f 1-2,4-5 veri.txt'yi kes

Hangisi aşağıdaki çıktıyı verecektir:

Bir iki dört beş alfa beta delta epsilon

Veya diyelim ki, ilk iki alanı hariç tutarak üçüncü alanı ve ondan sonraki tüm alanları istiyorsunuz. Bu durumda şu komutu kullanabilirsiniz:

-f 3- data.txt'yi kes

Hangisi aşağıdaki çıktıyı verecektir:

Üç dört beş gama delta epsilon

İle bir aralık belirtme LİSTE için de geçerlidir kesmek karakterler ( -C) veya bayt ( -B) bir satırdan. Örneğin, her satırın yalnızca üçüncüden onikinciye kadar olan karakterlerinin çıktısını almak için veri.txt, şu komutu kullanın:

-c 3-12 veri.txt'yi kes

Hangisi aşağıdaki çıktıyı verecektir:

E iki üçlü pha beta g

Her kelimenin arasındaki "boşluğun" aslında tek bir sekme karakteri olduğunu, dolayısıyla her iki çıktı satırında da on karakter görüntülendiğini unutmayın: sekiz alfasayısal karakter ve iki sekme karakteri. Başka bir deyişle, kesmek her satırın ilk iki karakterini atlayarak sekmeleri birer karakter olarak sayar; üçten on ikiye kadar karakterlerin çıktısını almak, sekmelerin her birini bir karakter olarak saymak; ve on ikinci karakterden sonra herhangi bir karakteri atlamak.

ASCII kodlu bir metin dosyasında her karakter tek bir baytlık (sekiz bit) veriyle temsil edildiğinden, karakterler yerine baytların sayılması bu durumda aynı çıktıyla sonuçlanacaktır. Yani komut:

-b 3-12 veri.txt'yi kes

Will, dosyamız için veri.txt, tam olarak aynı çıktıyı üretir:

E iki üçlü pha beta g

Sekme Dışında Bir Sınırlayıcı Belirtme

Sekme karakteri varsayılan sınırlayıcıdır kesmek Bir alanı neyin oluşturduğunu belirlemek için kullanılır. Dolayısıyla, dosyanızın alanları zaten sekmelerle ayrılmışsa, farklı bir sınırlayıcı karakter belirtmenize gerek yoktur.

Ancak sınırlayıcı olarak herhangi bir karakteri belirtebilirsiniz. Örneğin, dosya /etc/passwd sistemdeki her kullanıcı hakkında bilgi içerir, her satırda bir kullanıcı vardır ve her bilgi alanı iki nokta üst üste işaretiyle sınırlandırılmıştır (" : "). Örneğin, satırı /etc/passwd için kök kullanıcı şöyle görünebilir:

Kök:x:0:0:kök:/kök:/bin/bash

Bu alanlar, iki nokta üst üste karakteriyle ayrılmış olarak aşağıdaki bilgileri aşağıdaki sırayla içerir:

  1. Kullanıcı adı
  2. Şifre (şu şekilde gösterilir) Xşifrelenmişse)
  3. Kullanıcı kimlik numarası (UID)
  4. Grup kimlik numarası (GID)
  5. Yorum alanı (parmak komutu tarafından kullanılır)

Kullanıcı adı satırdaki ilk alandır, bu nedenle sistemdeki her kullanıcı adını görüntülemek için şu komutu kullanın:

Kes -f 1 -d ":" /etc/passwd

Hangisi çıktı verecek, örneğin:

Kök arka plan programı bin sys Chope

(Tipik bir sistemde, sistem hizmetlerine özel birçok hesap da dahil olmak üzere çok daha fazla kullanıcı hesabı vardır, ancak bu örnekte yalnızca beş kullanıcı olduğunu varsayacağız.)

Her satırın üçüncü alanı /etc/passwd dosya UID'dir (kullanıcı kimlik numarası), dolayısıyla her kullanıcı adını ve kullanıcı kimlik numarasını görüntülemek için şu komutu kullanın:

Kes -f 1,3 -d ":" /etc/passwd

Bu, örneğin aşağıdaki çıktıyı verecektir:

Kök:0 arka plan programı:1 bin:2 sys:3 Chope:1000

Gördüğünüz gibi çıktı, giriş için belirtilen sınırlayıcı karakterin aynısı kullanılarak varsayılan olarak sınırlandırılacaktır. Bu durumda, bu iki nokta üst üste karakteridir (" : "). Bununla birlikte, giriş ve çıkış için farklı bir sınırlayıcı belirtebilirsiniz. Dolayısıyla, önceki komutu çalıştırmak ancak çıktının bir boşlukla sınırlandırılmasını istiyorsanız, şu komutu kullanabilirsiniz:

Cut -f 1,3 -d ":" --output-delimiter=" " /etc/passwd root 0 daemon 1 bin 2 sys 3 doğrayın 1000

Peki ya çıktının bir sekmeyle sınırlandırılmasını istiyorsanız? Komut satırında sekme karakteri belirlemek biraz daha karmaşıktır çünkü bu yazdırılamayan bir karakterdir. Komut satırında belirtmek için onu kabuktan "korumanız" gerekir. Bu, kullandığınız kabuğa bağlı olarak farklı şekilde yapılır, ancak Linux varsayılan kabuğunda (bash), sekme karakterini şununla belirleyebilirsiniz: $"\t". Yani komut:

Cut -f 1,3 -d ":" --output-delimiter=$"\t" /etc/passwd

Örneğin aşağıdaki çıktıyı verecektir:

Kök 0 arka plan programı 1 bin 2 sys 3 parça 1000

kesme Örnekleri

-c 3 dosya.txt'yi kes

Dosyanın her satırının üçüncü karakterini çıktıla dosya.txt diğerlerini atlayarak.

-c 1-3 dosya.txt'yi kes

Dosyanın her satırının ilk üç karakterinin çıktısını alın dosya.txt gerisini atlayarak.

-c -3 dosya.txt'yi kes

Yukarıdaki komutun aynısı. Her satırın ilk üç karakterini çıktıla dosya.txt.

-c 3- dosya.txt'yi kes

Dosyanın her satırının üçüncü karakterinden son karakterine kadar çıktı alın dosya.txt ilk iki karakteri atlayarak.

Kes -d ":" -f 1 /etc/passwd

Dosyanın ilk alanını çıktıla /etc/passwd, burada alanlar iki nokta üst üste işaretiyle sınırlandırılmıştır (" : ").İlk alan /etc/passwd kullanıcı adıdır, dolayısıyla bu komut, dosyadaki her kullanıcı adının çıktısını alacaktır. şifre dosya.

Grep "/bin/bash" /etc/passwd | kes -d ":" -f 1.6

Herhangi bir girişin iki nokta üst üste işaretiyle ayrılmış birinci ve altıncı alanlarının çıktısını alın /etc/passwd belirten dosya /bin/bash oturum açma kabuğu olarak. Bu komut, oturum açma kabuğu olan herhangi bir kullanıcının kullanıcı adını ve ana dizinini verecektir. /bin/bash.

İlgili komutlar

grep— Normal bir ifadeyle eşleşen metni filtreleyin.
yapıştırmak— Karşılık gelen dosya satırlarını birleştirin.


Author: Rares Aioanei
Yayın tarihi: 5 Ocak 2012
Tercüme: A. Krivoshey
Çeviri yayın tarihi: 2 Kasım 2012

1. Giriş

Cut komutunu kullanmadan Linux'u yönetebileceğinizi düşünüyorsanız kesinlikle haklısınız. Ancak bu çok basit komut satırı yardımcı programına hakim olmak, işinizde daha verimli olmanızı sağlayacağı için size bazı avantajlar sağlayacaktır. Basitçe söylemek gerekirse, kesme, tarafından sunulan birçok metin filtreleme yardımcı programından biridir. işletim sistemi Linux. Başka bir komuttan veya bir dosyadan STDIN'i filtreler ve filtrelenen çıktıyı STDOUT'a gönderir.

2. Sık kullanılan seçenekler

Lafı fazla uzatmadan doğrudan asıl konuya geçelim ve en sık kullanılan komut satırı seçeneklerini inceleyelim.

-b, --bytes=LİSTE
listeye göre dosyadan yalnızca belirtilen baytları seç
-c, --karakterler=LİSTE
listeye göre dosyadan belirtilen karakterleri seçin
-f, --fields=LİSTE
yalnızca listede listelenen alanları seçer. Varsayılan sınırlayıcı TAB'tır. Varsayılan değer -d seçeneği kullanılarak geçersiz kılınabilir.
-d, --delimiter=DELIMITER
Alan ayırıcıyı ayarlamanızı sağlar. Yukarıda belirtildiği gibi varsayılan değer SEKME'dir, ancak bu seçenek onu geçersiz kılmanıza olanak tanır.

3. Listeleri kullanma

Bu durumda liste bir veya bir dizi bayt, karakter veya alandan oluşabilir. Örneğin, yalnızca ikinci baytın çıktısını almak için liste şunları içerecektir: tekil 2.
Bu yüzden:

2 - birinciden başlayarak yalnızca ikinci bayt, karakter veya alan çıktı olarak alınacaktır.
2-5 - ikinciden beşinciye kadar tüm baytlar, karakterler ve alanlar görüntülenecektir.
-3 - dördüncüye kadar tüm baytların, karakterlerin ve alanların çıktısı alınacaktır.
5- - beşinciden başlayarak tüm baytların, karakterlerin veya alanların çıktısı alınacaktır.
1,3,6 - yalnızca birinci, üçüncü ve altıncı baytların, karakterlerin veya alanların çıktısı alınacaktır.
1,3- - ilk ve üçüncüden başlayarak tüm baytlar, karakterler veya alanlar görüntülenecektir.

4. Karakterlere göre örnekleme

Aşağıdaki örnekler kendileri için konuşmaktadır. Cut.txt dosyasından yalnızca belirtilen karakter aralığının çıktısını almak için -c seçeneğini kullandık.

Yankı kesme komutu > kesim.txt $ kes -c 2 kes.txt u $ kes -c -3 kes.txt kes $ kes -c 2-5 kes.txt ut-c $ kes -c 5- kes.txt komutu

5. Bayt bazında örnekleme

-b seçeneğinin çalışma prensibi (bayt bayt), yukarıda karakterlerle çalışmak için açıklanana benzer. Bir karakterin boyutunun 1 byte olduğunu biliyoruz, dolayısıyla komutu -b seçeneğiyle çalıştırmanın sonucu aynı olacaktır.

$ kes -b 2 kes.txt u $ kes -b -3 kes.txt kes $ kes -b 2-5 kes.txt ut-c $ kes -b 5- kes.txt komutu

Cut.txt basit bir ASCII metin dosyasıdır. Farklılıklar yalnızca UTF-8 Unicode gibi çok baytlı kodlamalar kullanıldığında fark edilebilir. Örneğin:

$ echo Lubos > Cut.txt $ dosya Cut.txt Cut.txt: UTF-8 Unicode metin $ Cut -b 1-3 Cut.txt Lu $ Cut -c 1-3 Cut.txt Lub

6. Alanlara göre seçim

Daha önce de belirtildiği gibi, kesme komutunun kullandığı varsayılan alan TAB'dır. Örneğin ortak sınırlayıcının TAB olduğu bir dosya oluşturalım.
İpucu: Komut satırına SEKME tuşunu nasıl ekleyeceğinizi bilmiyorsanız, SEKME tuşuna basmadan önce CTRL + V klavye kısayolunu kullanın.

$ echo "1 2 3" > kes.txt $ echo "4 5 6" >> kes.txt $ kedi kes.txt 1 2 3 4 5 6 $ kes -f2- kes.txt 2 3 5 6

Yukarıdaki örnekte, TAB ortak bir sınırlayıcı olduğundan ve ayrıca kesme komutu tarafından varsayılan alan olarak kullanıldığından yalnızca ikinci ve üçüncü sütunlar yazdırıldı. Od komutunu kullanarak boşluk yerine TAB kullandığınızdan emin olabilirsiniz:

$ echo "1 2" > tab.txt $ echo "1 2" > space.txt $ od -a tab.txt 0000000 1 ht 2 nl 0000004 $ od -a space.txt 0000000 1 sp sp sp sp sp sp sp sp sp sp 2 nl 0000013

Farklı bir sınırlayıcı kullanmak için komutun davranışını geçersiz kılmanız gerekiyorsa -d seçeneği kullanılabilir.

$ echo 1-2-3-4 > kes.txt $ echo 5-6-7-8 >> kes.txt $ kedi kes.txt 1-2-3-4 5-6-7-8 $ kes -d - -f-2,4 kesim.txt 1-2-4 5-6-8

Klasik bir örnek, mevcut sistemdeki kullanıcıların listesini /etc/passwd dosyasından çıkarmak için -d seçeneğini kullanmamız gerektiği yerdir.

$ kes -d: -f 1 /etc/passwd kök arka plan programı bin sys senkronizasyon oyunlar man lp posta haberler uucp proxy www-veri ...

Tutarlı çıktı elde etmek için ortak sınırlayıcının her giriş hattında tutarlı olması gerektiğine dikkat edilmelidir. Örneğin, aşağıdaki örnekte boşluğu ortak sınırlayıcı olarak kullanmak zor olacaktır.

$ cat kesim.txt kesme komutu w komutu awk komutu wc komutu $ kesme -d " " -f2 kesme.txt komutu komut

Bu durumda, öncelikle birden fazla boşluğu virgül gibi tek bir sınırlayıcıyla değiştirmek için awk veya sed komutunu kullanmak çok daha kolay olacaktır.

$ sed "s/\s\+/,/" kesim.txt | kes -d , -f2 komut komut komut komut $ awk "( print $2; )" Cut.txt komut komut komut komut

7. Tamamlayıcıyı kullanarak verileri hariç tutmak

Cut komutu, istenen verileri seçici olarak çıktıya eklemenizi sağlar. Çıktıdan hariç tutulacak verileri seçmeniz gerektiğinde tamamlayıcı seçeneği çok kullanışlıdır.
Örnek:

$ echo 12345678 > kes.txt $ kedi kes.txt 12345678 $ kes --tamamlayıcı -c -2,4,6- kes.txt 35

8. Örnekler

Komut Söz Dizimi Tanım

UNIX'teki kes komutu, her dosya satırından bölümleri kesmek ve sonucu standart çıktıya yazmak için kullanılan bir komuttur. Bir çizginin parçalarını kesmek için kullanılabilir. bayt konumu, karakter ve alan. Temel olarak kesme komutu bir satırı dilimler ve metni çıkarır. Seçeneği komutla belirtmek gerekiyor aksi halde hata veriyor. Birden fazla dosya adı sağlanmışsa her dosyadaki veriler önce değil dosya adına göre.

kesme seçeneği... ...

adı olan iki dosyayı ele alalım. durum.txt Ve sermaye.txt sırasıyla Hindistan eyaletlerinin ve başkentlerinin 5 adını içerir.

$ kedi durumu.txt

Herhangi bir seçenek belirtilmediğinde hata görüntüler.

$ durum.txt'yi kes kes: baytların, karakterlerin veya alanların bir listesini belirtmelisiniz. Daha fazla bilgi için "cut --help" komutunu deneyin.

Seçenekler ve Örneklerle Açıklamaları:

1. -b(bayt): Belirli baytları çıkarmak için, bayt numaralarının virgülle ayrılmış listesiyle -b seçeneğini izlemeniz gerekir. Bayt aralığı tire(-) kullanılarak da belirtilebilir. Bayt numaralarının listesini belirtmek gerekir, aksi halde hata verir. Sekmeler ve geri boşluklar 1 baytlık bir karakter gibi ele alınır.

Aralıksız listeleme $ kes -b 1,2,3 durum.txt Ve Aru Göt Bih Chh Aralıklarla listeleme $ kes -b 1-3,5-7 durum.txt Andra Aruach Assm Bihr Chhtti

Baytları satırın başından sonuna kadar seçmek için özel bir form kullanır:

Bunda 1- bir satırın 1. byte'ından bitiş byte'ına kadar olan kısmı belirtir $ kes -b 1- durum.txt Andhra Pradesh Arunachal Pradesh Assam Bihar Chhattisgarh Burada -3, bir satırın 1. baytından 3. baytına kadar olduğunu gösterir $ kes -b -3 durum.txt Ve Aru Göt Bih Chh

2. -c (sütun): Karaktere göre kesmek için -c seçeneğini kullanın. Bu, -c seçeneğine verilen karakterleri seçer. Bu, virgülle ayrılmış sayıların bir listesi veya kısa çizgi (-) ile ayrılmış bir sayı aralığı olabilir. Sekmeler ve geri boşluklar karakter olarak ele alınır. Karakter numaralarının listesini belirtmek gerekir, aksi halde bu seçenekte hata verir.

$cut -c [(k)-(n)/(k),(n)/(n)] dosya adı

Burada, k karakterin başlangıç ​​konumunu belirtir ve N karakterin her satırdaki bitiş konumunu belirtir; k Ve N“-” ile ayrılırlar, aksi takdirde yalnızca pozisyon Giriş olarak alınan dosyanın her satırındaki karakter.

$ kes -c 2,5,7 durum.txt nr rah sm ir hti

Yukarıdaki kesme komutu, dosyanın her satırından ikinci, beşinci ve yedinci karakteri yazdırır.

$ kes -c 1-7 durum.txt Andhra Arunach Assam Bihar Chhatti

Yukarıdaki kesme komutu, dosyadaki her satırın ilk yedi karakterini yazdırır.

Cut, satırın başından sonuna kadar karakterleri seçmek için özel bir form kullanır:

$ kes -c 1- durum.txt Andra Pradeş Arunaçal Pradeş Assam Bihar Chhattisgarh Yukarıdaki komut ilk karakterden başlayarak sonuna kadar yazdırır. Burada komutta yalnızca başlangıç ​​konumu belirtilir ve bitiş konumu atlanır. $ kes -c -5 durum.txt Andhr Aruna Assam Bihar Chhat Above komutu başlangıç ​​konumunu beşinci karaktere yazdırır. Burada başlangıç ​​konumu atlanır ve bitiş konumu belirtilir.

3. -f (alan): -C seçeneği sabit uzunluktaki çizgiler için kullanışlıdır. Çoğu unix dosyasında sabit uzunlukta çizgiler yoktur. Yararlı bilgileri çıkarmak için sütunlar yerine alanlara göre kesmeniz gerekir. Belirtilen alanların listesi virgülle ayrılmalıdır. Aralıklar -f seçeneğiyle tanımlanmaz. kesmek kullanır sekme varsayılan alan sınırlayıcı olarak kullanılabilir, ancak şunu kullanarak diğer sınırlayıcılarla da çalışabilir: -D seçenek.
Not: UNIX'te boşluk sınırlayıcı olarak değerlendirilmez.

$cut -d "sınırlayıcı" -f (alan numarası) dosya.txt

Dosyadaki gibi durum.txt-d seçeneği kullanılmazsa alanlar boşlukla ayrılır ve ardından tüm satırı yazdırır:

$ kes -f 1 durum.txt Andra Pradeş Arunaçal Pradeş Assam Bihar Chhattisgarh

-d seçeneği kullanılırsa alanı alan ayırıcı veya sınırlayıcı olarak kabul eder:

$ kes -d " " -f 1 durum.txt Andhra Arunachal Assam Bihar Chhattisgarh Komutanlığı, dosyadaki her satırın birincisinden dördüncüsüne kadar alanı yazdırır. Emretmek:$ kes -d " " -f 1-4 durum.txt Çıktı: Andra Pradeş Arunaçal Pradeş Assam Bihar Chhattisgarh

4. –tamamlayıcı: Adından da anlaşılacağı gibi çıktıyı tamamlar. Bu seçenek diğer seçeneklerle kombinasyon halinde kullanılabilir. -F veya ile -C.

$ kes --tamamlayıcı -d " " -f 1 durum.txt Pradeş Pradeş Assam Bihar Chhattisgarh $ kes --tamamlayıcı -c 5 durum.txt Andha Pradeş Arunçal Pradeş Assa Biha Chhatisgarh

5. –çıkış sınırlayıcı: Varsayılan olarak çıkış sınırlayıcısı, kesimde belirttiğimiz giriş sınırlayıcıyla aynıdır. -D seçenek. Çıkış sınırlayıcısını değiştirmek için seçeneği kullanın –output-delimiter=”sınırlayıcı”.

$ kes -d " " -f 1,2 durum.txt --output-delimiter = "%" Andhra%Pradesh Arunaçal%Pradesh Assam Bihar Chhattisgarh

Burada kesme komutu, -f seçeneği kullanılarak belirtilen alanlar arasındaki standart çıktıdaki sınırlayıcıyı(%) değiştirir.

6. –versiyon: Bu seçenek sisteminizde o anda çalışmakta olan kesim sürümünü görüntülemek için kullanılır.

$kes --versiyon kesim (GNU coreutils) 8.26 Cygwin tarafından paketlenmiştir (8.26-2) Telif Hakkı (C) 2016 Free Software Foundation, Inc. Lisans GPLv3+: GNU GPL sürüm 3 veya üstü. Bu özgür bir yazılımdır: onu değiştirmekte ve yeniden dağıtmakta özgürsünüz. Yasaların izin verdiği ölçüde GARANTİ YOKTUR. David M. Ihnat, David MacKenzie ve Jim Meyering tarafından yazılmıştır.

Kesme Komutunun Uygulamaları

1. Borularla kuyruk nasıl kullanılır(|): Cut komutu, unix'in diğer birçok komutuyla birleştirilebilir. Aşağıdaki örnek çıktıda kedi komut giriş olarak verilir kesmek ile komut -F state.txt dosyasından gelen durum adlarını ters sırada sıralama seçeneği.

$ kedi durumu.txt | kes -d " " -f 1 | sıralama -r Chhattisgarh Bihar Assam Arunaçal Andhra

Ayrıca ek işlemler için bir veya daha fazla filtreyle borulanabilir. Aşağıdaki örnekte olduğu gibi cat, head ve Cut komutunu kullanıyoruz ve çıktısı directive(>) kullanılarak list.txt dosya adında saklanıyor.

$ kedi durumu.txt | kafa -n 3 | kes -d " " -f 1 > liste.txt $ kedi listesi.txt Andra Arunaçal Assam

Teşekkürler Saloni Gupta daha fazla örnek vermek için.



Makaleyi beğendin mi? Arkadaşlarınla ​​paylaş!