Kako izbrisati določene vrstice iz datoteke s pomočjo sed

Ob določenih priložnostih moramo iz datoteke ali več izbrisati določeno vrstico, na primer, zgodilo se mi je, da imam cel seznam datotek in moram črtati številko 27 vseh (vrstica št. 27 je vrstica ACL , norma, pravilo, konfiguracija), lahko uredim datoteko za datoteko ali pa preprosto dosežem, kar potrebujem, z ukazom žeja in bash skript (neobvezno).

Toda poskusimo z eno samo datoteko, ki je nekoliko preprosta.

Datoteko imamo distros-deb.txt ki vsebuje to:

debian

kubuntu

archlinux

raztopine

Mint zelena

To je datoteka distros-deb.txt je del, v katerega bomo postavili distribucije, ki temeljijo na Debianu, toda tam vidimo, da je v vrstici # 3 "archlinux", distro, ki očitno nima nič skupnega z Debianom, zato moramo to vrstico odpraviti. Za odpravo vrstice št. 3 te datoteke bomo postavili naslednje:

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

Pojasniti to vrstico je nekoliko enostavno žeja "3d" označujemo, da bomo črto # 3 izbrisali z distros-deb.txt Označimo, s katero datoteko naj delamo, torej izbrišemo vrstico št. 3 te datoteke, vse do tukaj, če pritisnemo Enter, nam bo pokazala, kaj želimo, ampak v terminalu, tako da > distros-deb-ok.txt navajamo, da je namesto da bi rezultat prikazal v terminalu, dal v datoteko s tem imenom.

Kaj je preprosto?

Prav tako se lahko izognemo uporabi > distros-deb-ok.txt z uporabo ustreznega parametra žeja, parameter -i

To pomeni, da v primeru, da želimo vrstico odstraniti iz datoteke in jo shraniti z istim imenom (in ne v drugo datoteko), preprosto dodajte parameter -i :

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

S tem boste vrstico št. 3 odstranili iz distros-deb.txt in jo shranili.

Kaj pa, če želim obseg vrstic, to je odstraniti vrstico # 3, pa tudi # 4 in # 5? Da bi to dosegli, postavimo razpon od 3 do 5, to je:

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

Pokazal mi bo le debian in kubuntu 😀

Kaj torej, če želim izbrisati iz vrstice 2 do zadnje, ko ne vem skupnega števila vrstic?

Samo uporabite dolarski simbol - »$

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

V primeru, da želite odstraniti iz prve vrstice na # 4, preprosto damo vrednost 1 na začetek:

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

To je bilo vse, zelo koristen nasvet, če želite narediti bash skripte za avtomatizacijo nalog in morate spremeniti in odpraviti vrstice konfiguracijskih datotek, da jih lahko uporabimo žeja o perl, pa tudi za odpravo že vemo, kako to storiti s sed 😉

pozdrav


Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.

  1.   mss-devel je dejal

    Zelo dober prispevek 😉

    1.    KZKG ^ Gaara je dejal

      Hvala

      Mimogrede, vaše e-poštno sporočilo smo prejeli zdaj, odgovarjam vam 😀

      pozdrav

  2.   brezimen je dejal

    Kot veliki duhovnik terminala, strežnikov in ssh povezav pridem do vas, oh, odlični KZKG ^ Gaara, in vas vprašam: kje lahko dobim vadnico na ravni svojega neznanja, ki mi omogoča uporabo ssh povezav med dvema oddaljenima računalnikoma v različnih omrežjih za skupno rabo besedilnih datotek, pdf, slike in zvoka (mp3)….

    🙂

    Resno, bi me lahko glede tega usmeril, imam dva računalnika, enega v službi in enega doma in potrebujem ssh povezavo med njimi (ker, kot razumem, ssh omogoča skupno rabo vsebine med stroji, ali se motim?).
    In če se motim, katero aplikacijo priporočate?
    In kje najdem osnovno vadnico v zvezi s tem?

    1.    -špiker- je dejal

      scp

      scp uporabnik @ machine_address: pot uporabnik @ machine_address: pot.

      Enaka sintaksa kot cp, vir -> cilj.

  3.   f3niX je dejal

    Pojavil si se človek, bil si izgubljen.

  4.   Joaquin je dejal

    Dober nasvet!

  5.   LycusHackerEmo je dejal

    Zanimiv namig ... xD

    po naključju ne poznate tistega, zaradi katerega bi krepko besedilo izstopalo?
    Mislim, imam datoteko txt, ki je slovar, ima več kot 10000 vrstic in želim, da poudari določeno besedilo pred zaustavitvijo točk ":" in to po eno, je preveč.

    1.    KZKG ^ Gaara je dejal

      Pozdravljeni,

      Datoteka txt je navadno besedilo, kot že ime pove ... navaden, brez formatov ali česar koli podobnega, žal mi je, ampak mislim, da tega, kar zahtevate, ni mogoče storiti, kajne? 🙁

      pozdrav

      1.    aca je dejal

        dejansko lahko, vendar bi morali poznati ciljno obliko.
        npr.
        echo $ (echo "Robert: Pozdravljeni. Spremeni tukaj" | sed 's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m /')
        vprašanje je, kako se rešiti.
        drugi način brisanja, ki ga je mogoče uporabiti, je sed '/' $ 1 '/ d', vendar morate biti prepričani o ponovnem.

        1.    LycusHackerEmo je dejal

          nato shranite v * .odt

          Ali ni lažjega načina, da to storite z LibreOffice?

  6.   Lolo je dejal

    Bi lahko del vrstice izbrisali, ostalo pa pustili?

    Recimo, da želim izbrisati vse pred besedo v določeni vrstici.

    Ali pa izbrišite vse, kar sledi tej besedi.

    1.    aca je dejal

      Da, gre za vlečenje regularnega izraza (po potrebi man sed -r, –regexp-razširjen)
      Izhajajoč iz tega, kar najdem
      odmev «Robert: Pozdravljeni. Spremeni tukaj »| sed 's / Spremeni //'
      z natančno določenim vzorcem in z. (en znak) in * (več kot en)
      Po:
      odmev «Robert: Pozdravljeni. Spremeni tukaj »| sed 's / Spremeni. * //'
      Pred:
      odmev «Robert: Pozdravljeni. Spremeni tukaj »| sed 's /. * Spremeni //'
      Če je pomembno, da se beseda pojavi
      odmev «Robert: Pozdravljeni. Spremeni tukaj »| sed 's / Spremeni. * / Spremeni /'
      ali bolj dodelan
      v vrstici, ki vsebuje Roberta, kaj gre po spremembi
      echo -e «Fritz: Pozdravljeni. Spremeni tukaj \ nRobert: Pozdravljeni. Spremeni tukaj »| sed '/Robert/s/Cambio.*//'
      ali tako kot na začetku vzemite drugo vrstico in obdelajte preostalo
      echo -e «Fritz: Pozdravljeni. Spremeni tukaj \ nRobert: Pozdravljeni. Spremeni tukaj \ nDrugo »| sed -e 2d -e 's / Spremeni. * //'
      echo -e «Fritz: Pozdravljeni. Spremeni tukaj \ nRobert: Pozdravljeni. Spremeni tukaj \ nDrugo »| sed '2d; s / Spremeni. * //'

      1.    Lolo je dejal

        Hvala, zelo koristno mi je.

  7.   MSX je dejal

    Lep članek, eden tistih, ki mi je všeč, kako super je SysAdmin!
    Kakšno bi bilo naše življenje brez sed, awek, perl, grep, rep, glava, "Emacs" in toliko drugih bistvenih orodij!?

  8.   Lisbeth Ollarves je dejal

    Hvala, bilo je zelo koristno.

  9.   žebljički je dejal

    Pozdravljeni, in kako lahko iz istega ukaza iz datoteke izbrišete vrstici 1,4 in 10?