Slik sletter du spesifikke linjer fra en fil ved hjelp av sed

Ved visse anledninger trenger vi å slette en bestemt linje fra en fil eller flere, for eksempel har det hendt meg at jeg har hatt en hel liste med filer, og jeg må slette linje nr. 27 av alle disse (linje nr. 27 er at av en ACL, norm, regel, konfigurasjon), kan jeg enten redigere filen for fil eller jeg kan bare oppnå det jeg trenger ved hjelp av kommandoen tørste og et bash-skript (valgfritt).

Men la oss prøve en enkelt fil litt enkel.

Vi har filen distros-deb.txt som inneholder dette:

debian

ubuntu

Arch Linux

soluses

mynte

Med andre ord filen distros-deb.txt er der vi vil sette de Debian-baserte distroene, men der ser vi at i linje 3 er det "archlinux", en distro som åpenbart ikke har noe med Debian å gjøre, så vi må eliminere den linjen. For å eliminere linje 3 i den filen vil vi sette følgende:

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

Å forklare denne linjen er noe enkelt, med tørst "3d" vi indikerer at vi vil slette linje # 3, med distros-deb.txt Vi indikerer hvilken fil vi skal jobbe med, det vil si slette linje nr. 3 i denne filen, opp til her hvis vi trykker Enter vil den vise oss hva vi vil ha, men i terminalen, så med > distros-deb-ok.txt vi indikerer at i stedet for å vise resultatet i terminalen, at det la det i en fil med dette navnet.

Hva er enkelt?

Vi kan også unngå å bruke > distros-deb-ok.txt bruker en riktig parameter for tørste, parameteren -i

Hvis vi vil slette linjen fra filen og lagre den med samme navn (og ikke i en annen fil), er det bare å legge til parameteren -i :

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

Dette fjerner linje 3 fra distros-deb.txt og lagrer den.

Hva om jeg vil ha en rekke linjer, det vil si å fjerne linje nr. 3, men også nr. 4 og nr. 5? For å oppnå dette setter vi området fra 3 til 5, det vil si:

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

Og den viser meg bare debian og kubuntu 

Så hva om jeg vil slette fra linje 2 til den siste når jeg ikke kjenner de totale linjene?

Bare bruk dollarsymbolet - »$

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

Hvis du vil eliminere fra første linje til # 4, setter vi ganske enkelt verdien 1 i begynnelsen:

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

Dette har vært alt, et veldig nyttig tips når du vil lage bash-skript for å automatisere oppgaver, og du må endre og eliminere linjer med konfigurasjonsfiler, for å endre kan vi bruke tørste o perl, i tillegg til å eliminere vet vi allerede hvordan vi gjør det med sed 

Hilsen


Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.

      mss-devel sa

    Veldig bra bidrag 😉

         KZKG ^ Gaara sa

      Takk

      Forresten, vi mottok e-posten din akkurat nå svarer jeg deg 😀

      Hilsen

      navnløs sa

    Som yppersteprest for terminalen, servere og ssh-forbindelser kommer jeg til deg, oh stor KZKG ^ Gaara, og jeg spør deg: hvor kan jeg få en opplæring på nivået av min uvitenhet som lar meg bruke ssh-forbindelser mellom to eksterne maskiner på forskjellige nettverk for å dele tekstfiler, pdf, bilde og lyd (mp3)….

    ????

    Seriøst, kan du veilede meg i denne forbindelse, jeg har to maskiner, en på jobb og en hjemme, og jeg trenger en ssh-forbindelse mellom de to (for slik jeg forstår det, lar ssh innhold deles mellom maskiner, har jeg rett ?).
    Og hvis jeg tar feil, hvilken applikasjon anbefaler du?
    Og hvor finner jeg en grunnleggende veiledning i denne forbindelse?

         -spyker- sa

      scp

      scp bruker @ maskinadresse: sti bruker @ maskinadresse: sti.

      Samme syntaks som cp, kilde -> destinasjon.

      f3niX sa

    Du dukket opp mann, du var tapt.

      Joaquin sa

    Godt tips!

      LycusHackerEmo sa

    Interessant tips ... xD

    Kjenner du tilfeldigvis en som gjør at fet tekst skiller seg ut?
    Jeg mener, jeg har en txt-fil som er en ordbok, den har mer enn 10000 XNUMX linjer, og jeg vil at den skal fremheve viss tekst før ":" - suspensjonspunktene og å gjøre det en etter en er for mye.

         KZKG ^ Gaara sa

      Hei,

      En txt-fil er ren tekst, som navnet antyder ... ren, uten formater eller noe lignende, jeg beklager, men jeg tror ikke det du spør kan gjøres, kan det? 🙁

      Hilsen

           ACA sa

        faktisk kan det, men du må vite destinasjonsformatet.
        f.eks:
        ekko $ (ekko "Robert: Hei. Endre her" | sed 's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m /')
        det handler om mestring.
        den andre måten å slette som kan brukes er sed '/' $ 1 '/ d', men du må være sikker på re.

             LycusHackerEmo sa

          lagre den deretter i * .odt

          Er det ikke en enklere måte å gjøre det med LibreOffice?

      Lolo sa

    Kan du slette en del av en linje og la resten være?

    La oss si at jeg vil slette alt foran et ord i en bestemt rad.

    Eller slett alt som følger ordet.

         ACA sa

      Ja, det er snakk om å trekke en regex (om nødvendig mann sed -r, –regexp-utvidet)
      Fra det jeg finner
      ekko «Robert: Hei. Endre her »| sed 's / Change //'
      med et veldefinert mønster og med. (ett tegn) og * (mer enn ett)
      deretter:
      ekko «Robert: Hei. Endre her »| sed 's / Endre. * //'
      Før:
      ekko «Robert: Hei. Endre her »| sed 's /. * Endre //'
      Hvis det betyr noe at ordet dukker opp
      ekko «Robert: Hei. Endre her »| sed 's / Endre. * / Endre /'
      eller mer forseggjort
      i linjen som inneholder Robert hva som går etter Change
      ekko -e «Fritz: Hei. Endre her \ nRobert: Hei. Endre her »| sed '/Robert/s/Cambio.*//'
      eller som i begynnelsen ta ut andre linje og behandle resten
      ekko -e «Fritz: Hei. Endre her \ nRobert: Hei. Endre her \ nAndre »| sed -e 2d -e 's / Endre. * //'
      ekko -e «Fritz: Hei. Endre her \ nRobert: Hei. Endre her \ nAndre »| sed '2d; s / Endre. * //'

           Lolo sa

        Takk, det er veldig nyttig for meg.

      MSX sa

    Fin artikkel, som jeg liker, hvor flott SysAdmin!
    Hva ville livet vårt vært uten sed, awek, perl, grep, tail, head, "Emacs" og så mange andre viktige verktøy!?

      Lisbeth Ollarves sa

    Takk, det var veldig nyttig.

      Pins sa

    Hei, og hvordan kunne du slette linje 1,4 og 10 i samme kommando fra en fil?