Hur man tar bort specifika rader från en fil med sed

Vid vissa tillfällen behöver vi ta bort en specifik rad från en fil eller flera, till exempel har det hänt mig att jag har haft en hel lista med filer och jag måste ta bort rad # 27 av alla dessa (rad # 27 är att av en ACL, norm, regel, konfiguration), kan jag antingen redigera fil för fil eller så kan jag bara uppnå det jag behöver med kommandot törst och ett bash-skript (valfritt).

Men låt oss prova en enda fil något enkelt.

Vi har filen distros-deb.txt som innehåller detta:

debian

kubuntu

archlinux

soluses

mint

Med andra ord filen distros-deb.txt är där vi kommer att placera Debian-baserade distros, men där ser vi att i rad # 3 finns "archlinux", en distro som uppenbarligen inte har något att göra med Debian, så vi måste eliminera den linjen. För att eliminera rad nr 3 i den filen lägger vi följande:

sed "3d" distros-deb.txt > distros-deb-ok.txt

Att förklara denna linje är något enkelt, med törstig "3d" vi indikerar att vi kommer att radera rad # 3, med distros-deb.txt Vi anger vilken fil vi ska arbeta med, det vill säga radera rad 3 i den här filen, upp till här om vi trycker på Enter kommer det att visa oss vad vi vill ha men i terminalen, så med > distros-deb-ok.txt vi indikerar att istället för att visa resultatet i terminalen, att det placeras i en fil med detta namn.

Vad är enkelt?

Vi kan också undvika att använda > distros-deb-ok.txt med en korrekt parameter för törst, parametern -i

Om vi ​​vill ta bort raden från filen och spara den med samma namn (och inte i en annan fil), lägg bara till parametern -i :

sed -i "3d" distros-deb.txt

Detta tar bort rad # 3 från distros-deb.txt och sparar den.

Vad händer om jag vill ha ett antal rader, det vill säga att ta bort rad # 3 men också # 4 och # 5? För att uppnå detta lägger vi intervallet från 3 till 5, det vill säga:

sed -i "3,5d" distros-deb.txt

Och det visar mig bara debian och kubuntu 😀

Så vad händer om jag vill radera från rad 2 till den sista när jag inte känner till de totala raderna?

Använd bara dollarsymbolen - »$

sed -i "2,$d" distros-deb.txt

Om du vill eliminera från första raden till # 4 sätter vi helt enkelt värdet 1 i början:

sed -i "1,4d" distros-deb.txt

Detta har varit allt, ett mycket användbart tips när du vill skapa bash-skript för att automatisera uppgifter och du måste ändra och eliminera rader med konfigurationsfiler, för att ändra kan vi använda törst o perl, liksom att eliminera vet vi redan hur man gör det med sed 😉

hälsningar


Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   mss-utveckling sade

    Mycket bra bidrag 😉

    1.    KZKG ^ Gaara sade

      Tack

      Förresten, vi fick ditt e-postmeddelande just nu svarar jag dig 😀

      hälsningar

  2.   namnlös sade

    Som överstepräst för terminalen, servrar och ssh-anslutningar kommer jag till dig, o jättebra KZKG ^ Gaara, och jag frågar dig: var kan jag få en handledning på nivån av min okunnighet som tillåter mig att använda ssh-anslutningar mellan två fjärrmaskiner på olika nätverk för att dela textfiler, pdf, bild och ljud (mp3)….

    🙂

    Seriöst, kan du vägleda mig i detta avseende, jag har två maskiner, en på jobbet och en hemma och jag behöver en ssh-anslutning mellan dem (för som jag förstår det, tillåter ssh att innehåll kan delas mellan maskiner, har jag rätt? ).
    Och om jag har fel, vilken applikation rekommenderar du?
    Och var hittar jag en grundläggande handledning i detta avseende?

    1.    -spyker- sade

      scp

      scp-användare @ machine_address: sökanvändare @ machine_address: sökväg.

      Samma syntax som cp, källa -> destination.

  3.   f3niX sade

    Du visade upp mannen, du var vilse.

  4.   Joaquin sade

    Bra tips!

  5.   LycusHackerEmo sade

    Intressant tips ... xD

    Känner du råkar en som gör att fet text sticker ut?
    Jag menar, jag har en txt-fil som är en ordlista, den har mer än 10000 rader och jag vill att den ska markera viss text före ":" -upphängningspunkterna och att göra det en efter en är för mycket.

    1.    KZKG ^ Gaara sade

      Hej,

      En txt-fil är ren text, som namnet antyder ... vanlig, utan format eller något liknande, jag är ledsen men jag tror att det du frågar inte kan göras, eller hur? 🙁

      hälsningar

      1.    aca sade

        faktiskt kan det, men du måste veta destinationsformatet.
        t.ex:
        echo $ (echo "Robert: Hej. Ändra här" | sed's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m / ')
        det handlar om att klara.
        det andra sättet att radera som kan användas är sed '/' $ 1 '/ d' men du måste vara säker på re.

        1.    LycusHackerEmo sade

          spara sedan i * .odt

          Finns det inte ett enklare sätt att göra det med LibreOffice?

  6.   Lolo sade

    Kan du ta bort en del av en rad och lämna resten?

    Låt oss säga att jag vill ta bort allt framför ett ord i en viss rad.

    Eller ta bort allt som följer det ordet.

    1.    aca sade

      Ja, det handlar om att dra en regex (vid behov man sed -r, –regexp-utvidgad)
      Från det jag hittar
      eko «Robert: Hej. Ändra här »| sed's / Change // '
      med ett väldefinierat mönster och med. (ett tecken) och * (mer än ett)
      då:
      eko «Robert: Hej. Ändra här »| sed's / Change. * // '
      tidigare:
      eko «Robert: Hej. Ändra här »| sed's /. * Ändra // '
      Om det betyder något att ordet dyker upp
      eko «Robert: Hej. Ändra här »| sed's / Change. * / Change / '
      eller mer detaljerad
      i raden som innehåller Robert vad som går efter Change
      eko -e «Fritz: Hej. Ändra här \ nRobert: Hej. Ändra här »| sed '/Robert/s/Cambio.*//'
      eller som i början ta ut andra raden och bearbeta resten
      eko -e «Fritz: Hej. Ändra här \ nRobert: Hej. Ändra här \ nAndra »| sed -e 2d -e's / Ändra. * // '
      eko -e «Fritz: Hej. Ändra här \ nRobert: Hej. Ändra här \ nAndra »| sed '2d; s / Ändra. * //'

      1.    Lolo sade

        Tack, det är mycket användbart för mig.

  7.   MSX sade

    Trevlig artikel, de jag gillar, hur bra SysAdmin!
    Vad skulle vårt liv vara utan sed, awek, perl, grep, svans, huvud, "Emacs" och så många andra viktiga verktyg!?

  8.   Lisbeth Ollarves sade

    Tack, det var till stor hjälp.

  9.   Stift sade

    Hej, och hur kan du radera raderna 1,4 och 10 i samma kommando från en fil?