Linux naredba cut: kompletan vodič s praktičnim primjerima

Posljednje ažuriranje: 05/14/2026
  • Funkcija cut izdvaja odabrane bajtove, znakove ili polja zasnovana na delimiterima iz svake linije datoteka ili standardnog ulaza.
  • Opcije -b, -c i -f definiraju šta se reže, dok -d, --complement, -s i --output-delimiter preciziraju kako se to ponaša.
  • U kombinaciji s alatima poput sort, head, tr ili grep, cut postaje moćan gradivni blok za cjevovode obrade podataka u shell-u.

komanda cut u Linuxu

Linux naredba cut je jedan od onih malih alata koji vam tiho štede sate kada svakodnevno radite s tekstualnim datotekama, logovima ili izlazom naredbi. Umjesto ručnog kopiranja i lijepljenja kolona, ​​znakova ili polja, cut vam omogućava da iz svakog reda, direktno iz terminala, jednom komandom, izrežete tačno one dijelove koji su vam potrebni.

Ako ste već koristili sed ili awk, zamislite cut kao njihovog jednostavnijeg, laganog rođaka koji se fokusira na vrlo efikasno rezanje kolona, ​​bajtova ili znakova. Lakše ga je naučiti, nevjerovatno je brz i pojavljuje se u mnogim shell skriptama kada trebate filtrirati ili preoblikovati podatke koji dolaze iz drugih naredbi ili tekstualnih datoteka.

Šta komanda cut radi u Linuxu

Ukratko, naredba cut uklanja ili izdvaja određene dijelove iz svakog reda datoteke ili iz standardnog ulaza (stdin). Ti dijelovi mogu biti definirani na tri glavna načina: bajtovima, znakovima ili poljima odvojenim delimiterom.

Osnovno ponašanje je uvijek isto: cut čita svaki red, primjenjuje pravilo selekcije i ispisuje samo selektovane dijelove na standardni izlaz. Ako nije navedena datoteka, čita se sa stdin-a, što ga čini vrlo pogodnim za kombinovanje sa cijevima.

Zvanična sintaksa naredbe cut, kako je opisano u priručniku GNU coreutils, je:

cut OPTION... ...

Neke ključne tačke o ovoj sintaksi:

  • Morate koristiti tačno jedan od -b, -c ili -f da biste odlučili da li režete po bajtovima, znakovima ili poljima.
  • DATOTEKA je opcionalna; ako ga izostavite ili koristite jednu crticu (-), izostavite čitanja sa standardnog ulaza.
  • Odabrani unos se ispisuje jednom, istim redoslijedom kojim je pročitan, bez promjene redova ili polja.

Konceptualno, rez je idealan kada već znate „gdje“ se zanimljivi podaci nalaze u svakom redu. Ako znate da je korisničko ime prvo polje odvojeno dvotačkama ili da datum zauzima znakove od 1 do 10, onda želite koristiti opciju "cut".

Osnovne opcije naredbe cut

Najvažniji dio savladavanja funkcije Cut je razumijevanje njenih glavnih opcija i kako odrediti "LISTU" pozicija ili polja. Ove opcije definiraju da li režete bajtove, znakove ili polja.

Odabir bajtova sa -b / –bytes

Opcija -b odabira određene bajtove iz svake linije. Ovo je posebno korisno za podatke fiksne širine, slične binarnim podacima, ili za naslijeđene tekstualne formate gdje svaka bajtna pozicija ima definirano značenje.

LISTA bajtova može sadržavati:

  • Pozicije jednog bajta, na primjer 1,3,5
  • rasponi, kao 1-4 or 5-7
  • Otvoreni rasponi, Kao što su 1- (od bajta 1 do kraja) ili -4 (od početka do bajta 4)

Opšta pravila koja priručnik za coreutils opisuje za bilo koju LIST-u su:

  • N – N-ti bajt, znak ili polje (pozicije počinju od 1, nema 0).
  • N- – od N do kraja linije.
  • NM – od N do M, uključujući i njih.
  • -M – od prve pozicije do M, uključujući i njih.

Primjer: izdvajanje određenih bajtova iz datoteke pod nazivom state.txt:

cut -b 1,2,3 state.txt

U ovoj naredbi, cut ispisuje prva tri bajta svake linije. Svaka linija se obrađuje nezavisno i samo te pozicije se šalju na stdout.

Primjer: kombinovanje bajtnih raspona odjednom:

cut -b 1-3,5-7 state.txt

Ovdje su bajtovi od 1 do 3 i od 5 do 7 sačuvani; sve izvan te selekcije se odbacuje. Taj uzorak se primjenjuje red po red na cijelu datoteku.

Primjer: od početnog bajta do kraja linije:

cut -b 4- geeklandblog.txt

Ovo će ispisivati ​​od bajta 4 do posljednjeg bajta u svakoj liniji. To je ekvivalentno eksplicitnom navođenju do posljednjeg poznatog indeksa bajta, ali ne morate unaprijed znati tačnu dužinu.

Primjer: od početka do određenog bajta:

cut -b -4 geeklandblog.txt

Ova naredba zadržava bajtove od 1 do 4 u svakoj liniji, a ostale odbacuje. Početna pozicija se automatski pretpostavlja da je 1 kada se izostavi.

Jedan važan detalj: u tekstualnim datotekama, svaki znak obično odgovara jednom bajtu, uključujući razmake, tabulatore i brisanje. To znači da ekstrakcija zasnovana na bajtovima često izgleda kao ekstrakcija zasnovana na znakovima, osim ako se ne radi o višebajtnim kodiranjima.

Odabir znakova sa -c / –znakovi

Opcija -c govori komandi cut da radi sa znakovima umjesto sa sirovim bajtovima. Ponovo prosljeđujete LISTU pozicija i raspona, ali ovaj put se oni odnose na znakove.

Neke karakteristike ponašanja -c:

  • Pozicije likova počinju od 1.
  • Tabulatori i razmaci se računaju kao jedan znak.
  • Morate navesti važeću listu pozicija znakova; u suprotnom će cut izbaciti grešku.

Generička sintaksa koja se vidi u mnogim referencama izgleda ovako:

cut -c - filename

Gdje je k početni znak, a n završni znak za svaki red. Ako koristite zareze (k,n) odabirete pojedinačne pozicije; ako koristite crticu (k-n) kreirate raspon.

Primjer: odabir određenih znakova iz svakog reda datoteke state.txt:

cut -c 2,5,7 state.txt

Ovo ispisuje znakove na pozicijama 2, 5 i 7 u svakom redu. Znakovi na drugim pozicijama se ignorišu i nikada se ne ispisuju.

Primjer: izdvajanje neprekidnog niza znakova:

cut -c 1-7 state.txt

Ovdje se za svaki red u datoteci čuvaju samo znakovi od 1 do 7. To je standardni obrazac kada želite zadržati prefiks (na primjer, datum ili kod fiksne dužine).

Primjer: od prvog znaka do kraja reda:

cut -c 1- state.txt

U ovom obliku, 1- znači od prvog znaka pa sve do posljednjeg. Budući da ne odrežete ništa s kraja, efektivno se ispisuje cijela linija.

Primjer: od početka do zadane pozicije znaka:

cut -c -5 state.txt

Ovdje, cut pretpostavlja da je početna pozicija 1, a krajnja pozicija 5, tako da zadržava prvih pet znakova, a ostale odbacuje. Ovo je korisno za skraćivanje linija na fiksnu dužinu znakova.

Važna napomena: u nekim lokalizacijama ili kodiranjima, jedan vidljivi znak može biti pohranjen kao više bajtova (na primjer, slova s ​​akcentima). Zato dokumentacija često upozorava da se slovo s akcentom može računati kao dva znaka, ovisno o kodiranju, i zašto -c i -b nisu uvijek zamjenjivi.

Odabir polja sa -f / –fields i delimiterom -d

Opcija -f se koristi za odabir određenih polja (logičkih kolona) iz svake linije. Ta polja su grupe znakova odvojene razdjelnikom. Podrazumevano, razdjelnik je TAB znak, što je vrlo uobičajeno u mašinski generisanim tekstualnim datotekama.

Međutim, možete — i često morate — prepisati delimiter koristeći -d. Na primjer, mnoge datoteke su odvojene razmacima, zarezima ili dvotačkama, a naredba cut neće prepoznati ove separatore osim ako ih eksplicitno ne konfigurirate.

Tipična sintaksa je:

cut -d "delimiter" -f LIST file.txt

Važni detalji pri radu s poljima:

  • Ako koristite -f bez -d na datoteci odvojenoj razmacima, naredba cut se neće razdvojiti na razmacima po defaultu. Dijeli se samo na TAB-u, osim ako ga ne promijenite.
  • Razmak se ne tretira automatski kao delimiter u tradicionalnom UNIX rezu. Morate eksplicitno postaviti -d" " ako su vaše kolone odvojene razmacima.
  • LIST za polja funkcioniše potpuno isto kao za bajtove ili znakoveMožete navesti brojeve pojedinačnih polja (1, 2, 5) ili raspone (1-3, 4-).

Primjer: korištenje opcije -f s podrazumijevanim razdjelnikom na datoteci odvojenoj razmacima:

cut -f 1 state.txt

Budući da je podrazumijevani razdjelnik TAB, a datoteke su odvojene razmacima, naredba cut ne identificira nikakve razdjelnike. Kao rezultat toga, ispisuje cijeli red umjesto samo jedne kolone. Zato dokumentacija insistira da uvijek trebate navesti -d kada unos nije odvojen tabulatorima.

Primjer: izdvajanje prvog polja datoteke odvojene razmacima:

cut -d " " -f 1 state.txt

Sada funkcija cut tretira razmak kao separator polja i ispisuje samo prvu kolonu svakog reda. Ovo je klasičan obrazac za izdvajanje kolone „name“ ili „id“ iz jednostavnih tekstualnih tabela.

Primjer: izdvajanje niza polja:

cut -d " " -f 1-4 state.txt

Ova naredba izdvaja polja od 1 do 4 iz svakog reda, koristeći razmak kao razdjelnik. Sve nakon četvrtog polja se zanemaruje prilikom ispisa.

Primjer: dobijanje korisničkih imena iz /etc/passwd korištenjem dvotočke kao razdjelnika:

cut -d ':' -f1 /etc/passwd

Na tipičnom Linux sistemu, /etc/passwd je odvojen dvotačkama, a prvo polje je korisničko ime. Pomoću gornje naredbe ispisujete čistu listu sistemskih i korisničkih računa bez ikakvih dodatnih informacija poput početnih direktorija ili prijavnih ljuski.

Još jedan uobičajeni idiom je "chain cut" nakon "cat"-a cijevi, iako obično možete preskočiti "cat":

cat /etc/passwd | cut -d ':' -f1

Rezultat je isti: prikazuje se samo prvo polje iz svakog reda odvojeno dvotačkom.

Napredne opcije rezanja iz GNU priručnika

Pored osnovnih prekidača -b, -c i -f, GNU verzija naredbe cut pruža nekoliko moćnih opcija koje kontrolišu kako se linije uzimaju u obzir, kako se polja isključuju i kako se izlaz formatira. Razumijevanje ovih stvari otvara vrata fleksibilnijoj obradi teksta.

Invertovanje selekcije sa -komplementom

Opcija -complement poništava selekciju definisanu sa -b, -c ili -f. Umjesto ispisa bajtova, znakova ili polja koje ste naveli, funkcija cut ispisuje sve osim njih.

Ključne tačke o komplementu:

  • Mora se kombinovati sa -b, -c ili -f, ne može stajati samostalno.
  • Obično se koristi sa -c ili -f za "brisanje" kolone ili opsega, a ostatak ostaviti netaknutim.

Primjer: uklanjanje prvog polja iz svakog reda u datoteci odvojenoj razmacima:

cut --complement -d " " -f 1 state.txt

Ovdje bi -f 1 normalno odabrao samo prvu kolonu, ali sa -complement, cut ispisuje sva polja osim prve. Ovo je veoma korisno kada imate datoteku sa vodećom kolonom ID-a koja vam nije potrebna.

Primjer: uklanjanje određene pozicije znaka iz svakog reda:

cut --complement -c 5 state.txt

Ova naredba izostavlja peti znak iz svakog reda i ispisuje ostale znakove po redu. To je jednostavan način za uklanjanje strukturnih znakova u formatu fiksne pozicije.

Istu logiku možete koristiti s rasponima, na primjer da biste sačuvali sva polja osim grupe njih. Samo definirajte polja ili znakove koje želite preskočiti i pustite da -complement uradi obrnuto.

Promjena izlaznog delimitera pomoću –output-delimiter

Podrazumevano, kada izdvajate polja sa -f, izlazna polja se odvajaju istim razdjelnikom koji se pojavljuje u ulazu (kako je definisano sa -d). Ponekad, međutim, želite izlaz u drugom formatu ili s drugačijim separatorom.

Opcija –output-delimiter vam omogućava da zamijenite separator ulaznih polja bilo kojim nizom znakova koji odaberete u konačnom izlazu. Ne mijenja izvornu datoteku; utiče samo na ono što se ispisuje.

Važne karakteristike –output-delimitera:

  • Radi samo kada se koristi -f (odabir polja).
  • To može biti bilo koji niz znakova, ne samo jedan znak.
  • Zamjena se dešava samo u izlaznoj datoteci; ulazna datoteka ostaje netaknuta.

Primjer: promjena razmaka u znakove procenta između odabranih polja:

cut -d " " -f 1,2 state.txt --output-delimiter='%'

U uobičajenom scenariju, izdvajanje polja 1 i 2 iz datoteke odvojene razmacima bi ispisalo „polje1 polje2“. Pomoću gornje naredbe, razmak koji razdvaja dva polja u izlazu zamjenjuje se znakom procenta, a izvorna datoteka se ne mijenja.

Još jedan primjer s rečenicom:

echo "estoy escribiendo una línea" | cut -d ' ' -f1-3 --output-delimiter='-'

Ovdje su odabrane tri riječi odvojene razmacima, ali izlaz ih prikazuje spojene crticama umjesto razmaka. Ovaj obrazac se često koristi prilikom prethodnog formatiranja vrijednosti za izlaze slične CSV-u ili prilikom pripreme argumenata za druge alate.

Ignorisanje linija bez razdjelnika korištenjem -s / –only-delimited

Ponekad obrađujete podatke orijentisane na polja i neki redovi jednostavno uopće ne sadrže razdjelnik. Podrazumevano, cut će ispisati te kompletne linije nepromijenjene kada koristite -f, što bi moglo da zagadi vaše rezultate.

Opcija -s ili –only-delimited govori komandi cut da preskoči svaki red koji ne sadrži delimiter. Te linije jednostavno nisu odštampane u izlazu.

Primjer: izostavljanje redova bez razmaka:

Pretpostavimo da imate datoteku test.txt poput ove:

la utilidad cut es fácil de usar y es útil final

ako pokrenete:

cut -d ' ' -f1-3 test.txt

Vidjet ćete prva tri polja odvojena razmacima za prvi red, a cijeli "završni" red ostao je nepromijenjen jer ne sadrži razmake.

Ako umjesto toga pokrenete:

cut -s -d ' ' -f1-3 test.txt

Sada je linija bez razmaka potpuno izostavljena iz izlaza. Uzimaju se u obzir i ispisuju se samo redovi koji sadrže delimiter.

Linije završene nulom sa -z / –zero-terminisane

Normalno, funkcija cut tretira znak za novi red kao separator redova. Čita red po red, do novog reda, obrađuje ga i nastavlja dalje.

Opcija -z mijenja to ponašanje tako da razdjelnik reda postaje NUL znak (ASCII 0) umjesto znaka za novi red. U praksi, jedna vidljiva posljedica u jednostavnim tekstualnim datotekama je da naredba cut može tretirati cijelu datoteku kao jednu logičku liniju kada nije prisutan NUL.

Primjer: tretiranje cijele datoteke kao jedne "linije" sa -z:

S obzirom na datoteku ejemplocut.txt sa:

Explicamos el uso del comando cut en mi blog

Trčanje:

cut -c 1-13 ejemplocut.txt

Ispisat će prvih trinaest znakova svake fizičke linije zasebno (na primjer „Explicamo el“ i „cut en mi blo“).

ako koristite:

cut -z -c 1-13 ejemplocut.txt

Funkcija cut vidi cijeli sadržaj datoteke kao jednu dugu logičku liniju (jer ne postoji NUL terminator) i ispisuje samo prvih trinaest znakova cijelog toka. Ovo ponašanje je posebno relevantno prilikom lančanog povezivanja alata koji koriste NUL-terminirani izlaz radi sigurnosti.

Informacije o verziji i opcije pomoći

GNU implementacija naredbe cut, koja je dio coreutils-a, podržava nekoliko administrativnih opcija:

  • cut --version ispisuje trenutno instaliranu verziju programa cut, zajedno s informacijama o autorskim pravima i licenci.
  • cut --help prikazuje kratku poruku pomoći sumiranje dostupnih opcija tačno onako kako je dokumentovano u priručniku za coreutils.

Ove opcije su korisne kada trebate provjeriti da li je određena funkcija (kao što je –output-delimiter ili -z) dostupna u vašem okruženju.

Primjeri iz stvarnog svijeta i kombinacije s drugim naredbama

Prava moć rezanja se pojavljuje kada ga počnete kombinovati sa drugim Unix alatima putem cijevi za provjera statusa AWS-a. To je savršen gradivni blok za procese obrade podataka, posebno kada želite izdvojiti kolone prije nego što proslijedite rezultat funkcijama sort, grep, head i tako dalje.

Izdvajanje kolone i njeno sortiranje

Jedan vrlo uobičajen obrazac je izdvajanje određenog polja, a zatim njegovo sortiranje. Zamislite datoteku state.txt gdje svaki red ima više polja odvojenih razmacima, a prvi sadrži naziv države.

cat state.txt | cut -d ' ' -f 1 | sort -r

Šta se ovdje dešava:

  • cat state.txt zapisuje svaki red na stdout.
  • cut -d ' ' -f 1 zadržava samo prvo polje iz svakog reda, koristeći razmak kao razdjelnik.
  • sort -r sortira rezultujuću listu obrnutim abecednim redom.

Konačni izlaz je sortirana lista naziva država, jedna po liniji.

Kombiniranje reza s glavom i preusmjeravanje

Još jedan klasičan obrazac je ograničavanje broja linija koje obrađujete, a zatim zapisivanje rezultata u datoteku. Pretpostavimo ponovo da imate datoteku state.txt i da vas zanimaju samo prva tri stanja i samo prvo polje svakog reda.

cat state.txt | head -n 3 | cut -d ' ' -f 1 > list.txt

Ovaj cjevovod:

  • Čita originalnu datoteku pomoću funkcije cat.
  • Koristi head -n 3 da bi sačuvao samo prve tri linije.
  • Izdvaja prvo polje odvojeno razmacima pomoću naredbe cut.
  • Preusmjerava izlaz na list.txt.

Zatim možete provjeriti datoteku list.txt kako biste potvrdili da sadrži tačno te tri stavke.

Rad sa listama članova i promjena razdjelnika

Zamislite da održavate datoteku s informacijama o članovima kluba, gdje su polja odvojena dvotačkama (:): datum rođenja, ime, prezime, odjeljak i tako dalje. Možda biste željeli izdvojiti samo puna imena i lijepo ih formatirati.

Prvi korak je odabir polja za ime i prezime korištenjem opcije cut sa -d ':' i -f. Na primjer, ako je ime u polju 4, a prezime u polju 5, mogli biste učiniti sljedeće:

cut -d ':' -f4,5 members.txt

Ovo ispisuje 4. i 5. polje odvojena dvotačkama za svaki red. Podrazumevano, u izlazu ostaju odvojeni dvotačkama.

Da biste ga učinili čitljivijim, možete zamijeniti delimiter koristeći –output-delimiter ili proslijediti izlaz na tr.

cut -d ':' -f4,5 members.txt --output-delimiter='\t'

Ovdje je originalni znak za razdvajanje dvotočke u izlazu zamijenjen znakom tabulatora, što je često ljepše prilikom pregleda u terminalima ili editorima.

Ili, koristeći tr:

cut -d ':' -f4,5 members.txt | tr ':' ' '

U ovom slučaju, prvo ispisujete parove „ime:prezime“, a zatim dvotačku zamjenjujete razmakom, što daje format „ime prezime“ prilagođeniji ljudima.

Ako želite ići korak dalje, konačni rezultat možete proslijediti u sortiranje kako biste listu sortirali po abecednom redu:

cut -d ':' -f4,5 members.txt | tr ':' ' ' | sort

Ovaj kratki cjevovod pokazuje kako cut surađuje s drugim standardnim alatima poput tr, sort, cat i grep kako bi izgradio brze, ali moćne lance za obradu teksta.

Korištenje funkcije "cut" za filtriranje fiksnih segmenata rečenice

Funkcija cut također blista u jednokratnim zadacima gdje samo želite zgrabiti dio niza ispisanog funkcijom echo. Na primjer, sa rečenicom:

echo "En UNIX y en GNU/Linux todo es un fichero"

Znakove od 4 do 7 možete izdvojiti na sljedeći način:

echo "En UNIX y en GNU/Linux todo es un fichero" | cut -c 4-7

Naredba ispisuje tačno taj susjedni raspon znakova iz rečenice. Ista logika se primjenjuje na bilo koji string ili izlaz naredbe koji proslijedite u cut.

Kratka historijska i tehnička pozadina

Alat za rezanje (cut) postoji još od ranih dana Unixa i standardiziran je u POSIX-u i Single UNIX specifikaciji. Originalna verzija je razvijena u AT&T Bell Laboratories, a kasnije je usvojena u mnogim Unix varijantama.

Na modernim Linux distribucijama, cut obično pruža GNU coreutils paket. Implementaciju u coreutils-u napisali su David M. Ihnat, David MacKenzie i Jim Meyering.

cut je također dostupan u BSD sistemima, drugim Unix-sličnim operativnim sistemima, pa čak i na Windowsu putem portova poput UnxUtils ili dodatnih okruženja. Ta sveprisutnost ga čini vrlo prenosivim alatom na koji se može osloniti u shell skriptama.

GNU stranica priručnika za rezanje naglašava nekoliko važnih pravila:

  • Morate odabrati tačno jedan od -b, -c ili -f po pozivu.
  • Vrijednosti LIST počinju od 1, a korištenje 0 se smatra greškom u novijim verzijama.
  • Odabrani unos se zapisuje istim redoslijedom i tačno jednom.

Dokumentacija, izvještaji o greškama i izvorni kod za coreutils (uključujući cut) su javno dostupni putem službenih GNU-ovih kanala.

Objedinjujući sve, naredba "cut" je mala, ali bitna komanda koja se isključivo fokusira na izdvajanje dijelova linija. Kada se jednom upoznate s bajtovima, znakovima i odabirom polja, plus nekoliko zastavica poput -complement, -s i -output-delimiter, možete brzo izgraditi cjevovode za obradu teksta koji se osjećaju gotovo kao "Lego za logove i datoteke", bez potrebe za težim alatima osim ako vam zaista nisu potrebni.

Python DevOps
Vezani članak:
Python za DevOps: Automatizacija, Cloud i MLOps u praksi
Slični postovi: