Linux cut-commando

Bijgewerkt: 05/04/2019 door Computer Hope

Op Unix net als besturingssystemen verwijdert (“cut out”) secties van elke regel van een bestand of bestanden.

Dit document behandelt de GNU / Linux-versie van cut.

Syntaxis

cut OPTION... ...

Opties

-b, –bytes = LIST Selecteer alleen de bytes van elke regel zoals gespecificeerd in LIST. LIST specificeert een byte, een set bytes of een bereik van bytes; zie LIJST specificeren hieronder.
-c, –characters = LIST Selecteer alleen de tekens van elke regel zoals gespecificeerd in LIST. LIST specificeert een teken, een reeks tekens of een reeks tekens; zie LIJST specificeren hieronder.
-d, –delimiter = DELIM gebruik karakter DELIM in plaats van een tab voor het veldscheidingsteken.
-f, –fields = LIST selecteer alleen deze velden op elke regel; druk ook elke regel af die geen scheidingsteken bevat, tenzij de optie -s is gespecificeerd. LIST specificeert een veld, een set velden of een reeks velden; zie LIJST specificeren hieronder.
-n Deze optie wordt genegeerd, maar is om compatibiliteitsredenen opgenomen.
–complement vullen de set geselecteerde bytes, tekens of velden aan.
-s, –only-delimited druk geen regels af die geen scheidingstekens bevatten.
–output-delimiter = STRING gebruik STRING als de uitvoerscheidingstekenreeks. Standaard wordt het invoerscheidingsteken gebruikt.
–help Toon een helpbericht en sluit af.
–version uitvoer versie-informatie en sluit af.

Gebruiksinformatie

Gebruik bij het aanroepen van cut de -b, -c, of -f optie, maar slechts één ervan.

Als er geen FILE is gespecificeerd, cut reads van de standaard input.

LIST specificeren

Elke LIST bestaat uit een geheel getal, een reeks gehele getallen of meerdere gehele getallen, gescheiden door kommas. De geselecteerde invoer wordt in dezelfde volgorde geschreven als waarin deze wordt gelezen, en wordt precies één keer naar de uitvoer geschreven. Een bereik bestaat uit:

Stel, u heeft bijvoorbeeld een bestand met de naam data.txt dat de volgende tekst bevat:

onetwothreefourfivealphabetagammadeltaepsilon

In dit voorbeeld wordt elk van deze woorden gescheiden door een tab-teken, geen spaties. Het tab-teken is het standaardscheidingsteken van cut, dus het zal standaard een veld beschouwen als alles wat door een tab wordt begrensd.

Om alleen het derde veld van elke regel te “knippen”, gebruik je het commando:

cut -f 3 data.txt

… wat het volgende zal opleveren:

threegamma

Als u in plaats daarvan alleen het tweede tot en met vierde veld van elke regel wilt “knippen”, gebruikt u de volgende opdracht:

cut -f 2-4 data.txt

… wat het volgende zal opleveren:

twothreefourbetagammadelta

Als je alleen de eerste door- tweede en vierde-tot-vijfde veld van elke regel (zonder het derde veld), gebruik het commando:

cut -f 1-2,4-5 data.txt

… wat het volgende zal opleveren:

onetwofourfivealphabetadeltaepsilon

Of, laten we zeggen dat u wil het derde veld en elk veld erna, zonder de eerste twee velden. In dit geval zou je het commando kunnen gebruiken:

cut -f 3- data.txt

… wat het volgende zal opleveren:

threefourfivegammadeltaepsilon

Het specificeren van een bereik met LIST is ook van toepassing op het knippen van tekens (-c) of bytes (-b) van een regel. Om bijvoorbeeld alleen het derde tot en met twaalfde teken van elke regel data.txt uit te voeren, gebruikt u het volgende commando:

cut -c 3-12 data.txt

… het volgende:

etwothrephabetag

Onthoud dat de “spatie” tussen elk woord eigenlijk een enkel tab-teken is, dus beide uitvoerregels geven tien tekens weer: acht alfanumerieke tekens en twee tabtekens. Met andere woorden, knippen is het weglaten van de eerste twee karakters van elke regel, waarbij tabs als één karakter worden geteld; het uitvoeren van tekens drie tot en met twaalf, waarbij tabbladen elk als één teken worden geteld; en het weglaten van tekens na de twaalfde.

Het tellen van bytes in plaats van tekens zal in dit geval resulteren in dezelfde uitvoer, omdat in een ASCII-gecodeerd tekstbestand elk teken wordt vertegenwoordigd door een enkele byte (acht bits ) Van de gegevens. Dus het commando:

cut -b 3-12 data.txt

… zal, voor ons bestand data.txt, exact dezelfde output produceren:

etwothrephabetag

Een ander scheidingsteken dan een tab specificeren

Het tab-teken is het standaardscheidingsteken dat wordt gebruikt om te bepalen wat een veld is. Dus als de velden van uw bestand al zijn gescheiden door tabs, hoeft u geen ander scheidingsteken op te geven.

U kunt echter elk teken als scheidingsteken specificeren.Het bestand / etc / passwd bevat bijvoorbeeld informatie over elke gebruiker op het systeem, één gebruiker per regel, en elk informatieveld wordt gescheiden door een dubbele punt (“:”). De regel / etc / passwd voor de rootgebruiker kan er bijvoorbeeld als volgt uitzien:

root:x:0:0:root:/root:/bin/bash

Deze velden bevatten de volgende informatie, in de volgende volgorde, gescheiden door een dubbele punt:

  1. Gebruikersnaam
  2. Wachtwoord (weergegeven als x indien versleuteld)
  3. Gebruikers-ID-nummer (UID)
  4. Groeps-ID-nummer (GID)
  5. Commentaarveld (gebruikt door het vingercommando)
  6. Basismap
  7. Shell

De gebruikersnaam is het eerste veld op de regel, dus om elke gebruikersnaam op het systeem weer te geven, gebruikt u het commando:

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

… wat zal uitvoeren , bijvoorbeeld:

rootdaemonbinsyschope

(Er zijn veel meer gebruikersaccounts op een typisch systeem, inclusief veel accounts die specifiek zijn voor systeemservices, maar voor dit voorbeeld zullen we doen alsof er zijn slechts vijf gebruikers.)

Het derde veld van elke regel in het / etc / passwd-bestand is de UID (gebruikers-ID-nummer), dus om elke gebruikersnaam en gebruikers-ID-nummer weer te geven, gebruikt u het commando:

… wat het volgende zal opleveren, bijvoorbeeld:

root:0daemon:1bin:2sys:3chope:1000

Zoals je kunt zien, zal de output zijn standaard gescheiden met hetzelfde scheidingsteken dat voor de invoer is opgegeven. In dit geval is dat de dubbele punt (“:”). U kunt echter een ander scheidingsteken specificeren voor de invoer en uitvoer. Dus als u de vorige opdracht wilt uitvoeren, maar de uitvoer wilt laten scheiden door een spatie, je zou het commando kunnen gebruiken:

cut -f 1,3 -d ":" --output-delimiter=" " /etc/passwd
root 0daemon 1bin 2sys 3chope 1000

Maar wat als je wilt dat de uitvoer wordt gescheiden door een tab Het specificeren van een tab-teken op de opdrachtregel is iets gecompliceerder, omdat het een niet-afdrukbaar teken is. Om het op de opdrachtregel te specificeren, moet u het “beschermen” tegen de shell. Dit wordt anders gedaan, afhankelijk van welke shell u ” hergebruikt, maar in de Linux standaard shell (bash), kun je het tab-teken specificeren met $ “\ t”. Dus het commando:

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

… zal het volgende uitvoeren, bijvoorbeeld:

root0daemon1bin2sys3chope1000

Voorbeelden

cut -c 3 file.txt

Voer het derde teken uit van elke regel van het bestand file.txt, waarbij de andere worden weggelaten.

cut -c 1-3 file.txt

Voer de eerste drie tekens van elke regel van het bestand file.txt uit, en laat de rest weg.

cut -c -3 file.txt

Hetzelfde als het bovenstaande commando. Voer de eerste drie tekens van elke regel van file.txt uit.

cut -c 3- file.txt

Voer de derde tot en met de laatste tekens van elke regel van het bestand file.txt uit, zonder de eerste twee karakters.

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

Voer het eerste veld van het bestand / etc / passwd uit, waar velden worden gescheiden door een dubbele punt (“:”). Het eerste veld van / etc / passwd is de gebruikersnaam, dus dit commando zal elke gebruikersnaam in het passwd-bestand uitvoeren.

grep "/bin/bash" /etc/passwd | cut -d ":" -f 1,6

Voer de eerste en zesde velden uit, gescheiden door een dubbele punt, van elk item in het / etc / passwd-bestand dat / bin / bash specificeert als de login-shell. Dit commando geeft de gebruikersnaam en homedirectory weer van elke gebruiker wiens login-shell / bin / bash is.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *