- För omformatering av källkoden
- För rengöring av data
- För att förenkla kommandoradsutmatningen
Om vi talar om ledande blanksteg är de relativt lätta att upptäcka som i början av texten. Det är dock inte lätt att upptäcka de bakre vita utrymmena. Detsamma är fallet med dubbla mellanslag som ibland är svåra att upptäcka. Allt blir mer utmanande när du behöver ta bort alla de ledande och efterföljande vita utrymmena från ett dokument som innehåller tusentals rader.
För att ta bort blanksteg från ditt dokument kan du använda olika verktyg som awk, sed, cut och tr. I vissa andra artiklar har vi diskuterat användningen av awk för att ta bort vita utrymmen. I den här artikeln kommer vi att diskutera användningen av sed för att ta bort vita utrymmen från data.
Du lär dig hur du använder sed för att:
- Ta bort alla vita utrymmen
- Ta bort ledande vita utrymmen
- Ta bort efterföljande vita utrymmen
- Ta bort både ledande och bakre vita utrymmen
- Byt ut flera mellanslag med ett mellanslag
Vi kör kommandona på Ubuntu 20.04 Focal Fossa. Du kan också köra samma kommandon på andra Linux-distributioner. Vi använder standard Ubuntu Terminal-applikationen för att köra kommandona. För att öppna terminalen använder du tangentbordsgenvägen Ctrl + Alt + T.
Vad är Sed
Sed (står för stream editor) är ett mycket kraftfullt och praktiskt verktyg i Linux som gör att vi kan utföra grundläggande textmanipulationer på ingångsströmmarna. Det är inte en textredigerare, men det hjälper till att manipulera och filtrera text. Den tar emot inmatningsströmmarna och redigerar den enligt användarens instruktioner och skriver sedan ut den transformerade texten till skärmen.
Med sed kan du:
- Välj text
- Söktext
- Infoga text
- Ersätt text
- Ta bort text
Använda Sed för att ta bort vita utrymmen
Vi använder följande syntax för att ta bort blanksteg från texten:
s / REGEXP / ersättning / flaggorVar
- s /: är substitutionsuttryck
- REGEXP: är ett vanligt uttryck att matcha
- ersättning: är ersättningssträngen
- flaggor: Vi använder endast “g” -flaggan för att möjliggöra utbyte globalt på varje rad
Vanliga uttryck
Några av de vanliga uttrycken vi kommer att använda här är:
- ^ matchens start på linjen
- $ tändstickor slutet på raden
- + matchar en eller flera förekomster av föregående tecken
- * matchar noll eller fler förekomster av föregående tecken.
För demonstrationsändamål kommer vi att använda följande exempelfil med namnet “testfil”.
Visa alla blanksteg i en fil
För att hitta alla mellanslag i din fil, rör utmatningen av cat-kommandot till tr-kommandot så här:
$ katt testfil | tr "" "*" | tr "\ t" "&"Det här kommandot ersätter alla blanksteg i din fil med (*) symbol, vilket gör det lättare att upptäcka alla mellanslag, oavsett om de är enkla, flera, ledande eller efterföljande.
I följande skärmdump kan du se att blanksteg ersätts med * -symbolen.
Ta bort alla mellanslag (inklusive mellanslag och flikar)
I vissa fall måste du ta bort alla mellanslag från data, dvs.e. ledande, efterföljande och vita mellanrum mellan texterna. Följande kommando tar bort alla mellanslag från "testfilen".
$ katt testfil | sed -r 's / \ s + // g'Notera: Sed ändrar inte dina filer om du inte sparar utdata i filen.
Produktion:
Efter att ha kört ovanstående kommando uppträdde följande utdata som visar att alla mellanslag har tagits bort från texten.
Du kan också använda följande kommando för att verifiera att alla mellanslag har tagits bort.
$ katt testfil | sed -r 's / \ s + // g' | tr "" "*" | tr "\ t" "&"Från utgången kan du se att det inte finns någon (*) symbol vilket betyder att alla vita utrymmen har tagits bort.
För att ta bort alla mellanslag men bara från en specifik rad (låt oss säga rad nummer 2) kan du använda följande kommando:
$ katt testfil | sed -r '2s / \ s + // g'Ta bort alla ledande blanksteg (inklusive mellanslag och flikar)
För att ta bort alla blanksteg från början av varje rad (ledande blanksteg), använd följande kommando:
$ katt testfil | sed 's / ^ [\ t] * //'Produktion:
Följande utdata uppträdde efter att ha kört ovanstående kommando, som visar att alla ledande blanksteg har tagits bort från texten.
Du kan också använda följande kommando för att verifiera att alla ledande blanksteg har tagits bort:
$ katt testfil | sed's / ^ [\ t] * // '| tr "" "*" | tr "\ t" "&"Från utgången kan du se att det inte finns någon (*) symbol i början av raderna som verifierar att alla ledande vita utrymmen har tagits bort.
För att ta bort de ledande vita utrymmena från endast en specifik rad (låt oss säga rad nummer 2) kan du använda följande kommando:
$ katt testfil | sed '2s / ^ [\ t] * //'Ta bort alla efterföljande blanksteg (inklusive mellanslag och flikar)
För att ta bort alla mellanslag från slutet av varje rad (efterföljande blanksteg), använd följande kommando:
$ katt testfil | sed's / [\ t] * $ // 'Produktion:
Följande utdata visades efter att ha kört ovanstående kommando, som visar att alla efterföljande blanksteg har tagits bort från texten.
Du kan också använda följande kommando för att verifiera att alla efterföljande blanksteg har tagits bort.
$ katt testfil | sed's / [\ t] * $ // '| tr "" "*" | tr "\ t" "&"Från utgången kan du se att det inte finns någon (*) symbol i slutet av raderna som verifierar att alla efterföljande vita utrymmen har tagits bort.
För att ta bort de efterföljande vita utrymmena från en specifik rad (låt oss säga rad nummer 2) kan du använda följande kommando:
$ katt testfil | sed '2s / [\ t] * $ //'Ta bort både ledande och bakre vita utrymmen
Att ta bort alla mellanslag från både början och slutet av varje rad (i.e. både ledande och efterföljande blanksteg), använd följande kommando:
$ katt testfil | sed 's / ^ [\ t] * //; s / [\ t] * $ //'Produktion:
Följande utdata dök upp efter att ha kört ovanstående kommando, vilket visar att både de ledande och efterföljande vita utrymmena har tagits bort från texten.
Du kan också använda följande kommando för att verifiera att både de ledande och efterföljande vita utrymmena har tagits bort.
$ katt testfil | sed 's / ^ [\ t] * //; s / [\ t] * $ //' | tr "" "*" | tr "\ t" "&"Från utgången kan du se att det inte finns någon (*) symbol i början eller slutet av raderna som verifierar att alla ledande och efterföljande vita utrymmen har tagits bort.
För att ta bort både de ledande och efterföljande mellanslag från endast en specifik rad (låt oss säga rad nummer 2) kan du använda följande kommando:
$ katt testfil | sed '2s / ^ [\ t] * //; 2s / [\ t] * $ //'Ersätt flera blanksteg med enstaka mellanslag
I vissa fall finns det flera blanksteg på samma plats i filen, men du behöver bara enstaka blanksteg. Du kan göra det genom att ersätta de flera utrymmena med ett enda utrymme med sed.
Följande kommando kommer att ersätta alla flera blanksteg med enstaka blanksteg från varje rad i "testfilen".
$ katt testfil | sed's / [] \ + / / g 'Produktion:
Följande utdata uppträdde efter att ha kört ovanstående kommando, som visar att flera blanksteg har ersatts med det enda blanksteget.
Du kan också använda följande kommando för att verifiera om flera blanksteg ersätts med enstaka mellanslag:
$ katt testfil | sed's / [] \ + / / g '| tr "" "*" | tr "\ t" "&"Från utgången kan du se den enskilda (*) symbolen på varje plats som verifierar att alla förekomster av flera vita utrymmen ersätts med ett enda utrymme.
Så det handlade om att ta bort vita utrymmen från dina data med sed. I den här artikeln har du lärt dig hur man använder sed för att ta bort alla mellanslag från dina data, ta bort endast det ledande eller efterföljande mellanslaget och ta bort både ledande och efterföljande. Du har också lärt dig hur man ersätter flera mellanslag med ett enda mellanslag. Det blir nu lätt för dig att ta bort blanksteg från en fil som innehåller hundratals eller tusentals rader.