Kako izbrisati određene retke iz datoteke pomoću sed

U određenim prilikama moramo izbrisati određeni redak iz datoteke ili nekoliko njih, na primjer, dogodilo mi se da imam cijeli popis datoteka i moram izbrisati redak # 27 svih (redak # 27 je taj ACL-a, norme, pravila, konfiguracije), mogu uređivati ​​datoteku po datoteku ili jednostavno postići ono što trebam pomoću naredbe žeđ i bash skriptu (nije obavezno).

Pokušajmo s jednom datotekom, donekle jednostavnom.

Imamo dosje distros-deb.txt koji sadrži ovo:

debian

ubuntu

Arch Linux

otopine

menta

Odnosno datoteka distros-deb.txt je u koji ćemo staviti distrose temeljene na Debianu, ali tamo vidimo da se u retku # 3 nalazi "archlinux", distro koji očito nema nikakve veze s Debianom, pa tu liniju moramo eliminirati. Da bismo eliminirali redak 3 te datoteke, stavit ćemo sljedeće:

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

Objasniti ovu liniju pomalo je jednostavno žeđ "3d" naznačujemo da ćemo izbrisati redak # 3 s distros-deb.txt Označavamo na kojoj datoteci ćemo raditi, odnosno brišemo red # 3 ove datoteke, sve do ovdje ako pritisnemo Enter pokazat će nam što želimo, ali u terminalu, tako da sa > distros-deb-ok.txt naznačujemo da umjesto prikazivanja rezultata u terminalu, da ga stavimo u datoteku s ovim imenom.

Što je jednostavno?

Također, možemo izbjeći upotrebu > distros-deb-ok.txt koristeći odgovarajući parametar žeđ, parametar -i

Odnosno, u slučaju da želimo izbrisati redak iz datoteke i spremiti je s istim imenom (a ne u drugu datoteku), jednostavno dodajte parametar -i :

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

Ovo će ukloniti redak # 3 iz distros-deb.txt i spremiti ga.

Što ako želim raspon linija, to jest ukloniti liniju # 3, ali i # 4 i # 5? Da bismo to postigli stavili smo raspon od 3 do 5, to jest:

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

I pokazat će mi samo debian i kubuntu 😀

Pa što ako želim izbrisati iz retka 2 do posljednjeg, kad ne znam ukupan broj redaka?

Samo upotrijebite simbol dolara - »$

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

U slučaju da želite eliminirati iz prvog retka u # 4, tada na početak jednostavno stavimo vrijednost 1:

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

Ovo je bilo sve, vrlo koristan savjet kada želite napraviti bash skripte za automatizaciju zadataka i trebate izmijeniti i eliminirati linije konfiguracijskih datoteka, da bismo ih mogli koristiti žeđ o perl, kao i za uklanjanje već znamo kako to učiniti sa sed 😉

pozdravi


16 komentara, ostavi svoj

Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   mss-razvoj dijo

    Vrlo dobar doprinos 😉

    1.    KZKG ^ Gaara dijo

      Hvala ti

      Usput, upravo smo vam odgovorili e-poštom, odgovaram vam 😀

      pozdravi

  2.   bezimen dijo

    Kao vrhovni svećenik terminala, poslužitelja i ssh veza, dolazim k vama, o sjajni KZKG ^ Gaara, i pitam vas: gdje mogu dobiti vodič na razini svog neznanja koji mi omogućuje upotrebu ssh veza između dva udaljena stroja u različitim mrežama za razmjenu tekstualnih datoteka, pdf-a, slike i zvuka (mp3)….

    ????

    Ozbiljno, možete li me uputiti u vezi s tim, imam dva stroja, jedan na poslu i jedan kod kuće i trebam ssh vezu između njih (jer kako razumijem, ssh omogućuje dijeljenje sadržaja između strojeva, jesam li u pravu? ).
    A ako se varam, koju aplikaciju preporučujete?
    I gdje mogu pronaći osnovnu lekciju u vezi s tim?

    1.    -spaker- dijo

      scp

      scp user @ machine_address: path korisnik @ machine_address: path.

      Ista sintaksa kao cp, izvor -> odredište.

  3.   f3niX dijo

    Pojavio si se čovječe, bio si izgubljen.

  4.   Joaquin dijo

    Dobar savjet!

  5.   LycusHackerEmo dijo

    Zanimljiv savjet ... xD

    slučajno ne poznajete onog po kojem se podebljani tekst ističe?
    Mislim, imam txt datoteku koja je rječnik, ima više od 10000 redaka i želim da istakne određeni tekst prije nego što ":" obustavi točke i čini to jednu po jednu previše.

    1.    KZKG ^ Gaara dijo

      Pozdrav,

      Txt datoteka je običan tekst, kao što naziv govori ... običan, bez formata ili bilo čega sličnog, žao mi je, ali mislim da ono što tražite ne može biti učinjeno, zar ne? 🙁

      pozdravi

      1.    ACA dijo

        zapravo može, ali morali biste znati odredišni format.
        npr:
        echo $ (echo "Robert: Zdravo. Promijeni ovdje" | sed 's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m /')
        pitanje je snalaska.
        drugi način brisanja koji se može koristiti je sed '/' $ 1 '/ d', ali morate biti sigurni u ponovno.

        1.    LycusHackerEmo dijo

          zatim ga spremite u * .odt

          Ne postoji li jednostavniji način za postizanje LibreOfficea?

  6.   Lolo dijo

    Možete li izbrisati dio crte, a ostatak ostaviti?

    Recimo da želim izbrisati sve ispred riječi u određenom redu.

    Ili izbrišite sve što slijedi nakon te riječi.

    1.    ACA dijo

      Da, stvar je u povlačenju regularnog izraza (ako je potrebno čovječe sed -r, –regexp-prošireni)
      Polazeći od onoga što nalazim
      odjek «Robert: Zdravo. Promijeni ovdje »| sed 's / Change //'
      s dobro definiranim uzorkom i sa. (jedan znak) i * (više od jednog)
      tada je:
      odjek «Robert: Zdravo. Promijeni ovdje »| sed 's / Promjena. * //'
      Prije:
      odjek «Robert: Zdravo. Promijeni ovdje »| sed 's /. * Promijeni //'
      Ako je važno da se riječ pojavi
      odjek «Robert: Zdravo. Promijeni ovdje »| sed 's / Change. * / Change /'
      ili detaljnije
      u retku koji sadrži Roberta što ide nakon Promjene
      odjek -e «Fritz: Zdravo. Promijenite ovdje \ nRobert: Zdravo. Promijeni ovdje »| sed '/Robert/s/Cambio.*//'
      ili kao na početku izvadite drugi redak i obradite ostatak
      odjek -e «Fritz: Zdravo. Promijenite ovdje \ nRobert: Zdravo. Promijenite ovdje \ nOstalo »| sed -e 2d -e 's / Promjena. * //'
      odjek -e «Fritz: Zdravo. Promijenite ovdje \ nRobert: Zdravo. Promijenite ovdje \ nOstalo »| sed '2d; s / Promjena. * //'

      1.    Lolo dijo

        Hvala vam, vrlo mi je korisno.

  7.   MSX dijo

    Lijep članak, koji mi se sviđa, kako je sjajan SysAdmin!
    Kakav bi bio naš život bez sed, awek, perl, grep, rep, glava, "Emacs" i toliko drugih bitnih alata!?

  8.   Lisbeth Ollarves dijo

    Hvala, bilo je vrlo korisno.

  9.   igle dijo

    Pozdrav, a kako biste mogli izbrisati retke 1,4 i 10 iz datoteke u istoj naredbi?