Tiettyjen rivien poistaminen tiedostosta sed

Joissakin tapauksissa meidän on poistettava tietty rivi tiedostosta tai useita, esimerkiksi minulle sattui, että minulla on ollut koko luettelo tiedostoista ja minun on poistettava rivi # 27 kaikista näistä (rivi # 27 on ACL , normi, sääntö, kokoonpano), joko voin muokata tiedostoa tiedostona tai voin vain saavuttaa tarvitsemani komennolla jano ja bash-komentosarja (valinnainen).

Mutta kokeillaan yhtä tiedostoa hieman yksinkertaisella.

Meillä on tiedosto distros-deb.txt joka sisältää tämän:

debian

Kubuntu

Arch Linux

yksin

minttu

Toisin sanoen tiedosto distros-deb.txt on, johon laitamme Debian-pohjaiset distrot, mutta siellä näemme, että rivillä # 3 on "archlinux", distro, jolla ei tietenkään ole mitään tekemistä Debianin kanssa, joten meidän on poistettava tämä rivi. Tämän rivin # 3 poistamiseksi asetamme seuraavan:

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

Tämän linjan selittäminen on melko helppoa janoinen "3d" ilmoitamme poistavansa rivin # 3 distros-deb.txt Ilmoitamme, mitä tiedostoa haluat työskennellä, eli poista tämän tiedoston rivi # 3, tähän asti, jos painamme Enter, se näyttää meille mitä haluamme, mutta terminaalissa, joten > distros-deb-ok.txt osoitamme, että sen sijaan, että tulos näytetään terminaalissa, se laittaa sen tiedostoon tällä nimellä.

Mikä on yksinkertaista?

Voimme myös välttää > distros-deb-ok.txt käyttämällä oikeaa parametria jano, parametri -i

Eli jos haluamme poistaa rivin tiedostosta ja tallentaa sen samalla nimellä (eikä toiseen tiedostoon), lisää vain parametri -i :

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

Tämä poistaa rivin # 3 distros-deb.txt-tiedostosta ja tallentaa sen.

Entä jos haluan joukon viivoja, toisin sanoen poistaa viivat # 3, mutta myös # 4 ja # 5? Tämän saavuttamiseksi asetamme alueen 3-5: een, toisin sanoen:

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

Ja se näyttää minulle vain debianin ja kubuntun 😀

Joten mitä jos haluan poistaa riviltä 2 viimeiseen, kun en tiedä rivien kokonaismäärää?

Käytä vain dollarin symbolia - »$

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

Jos haluat poistaa ensimmäiseltä riviltä numeroon 4, laitamme yksinkertaisesti arvon 1 alkuun:

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

Tämä on ollut kaikkea, erittäin hyödyllinen vinkki, kun haluat tehdä bash-komentosarjoja tehtävien automatisoimiseksi ja sinun on muokattava ja poistettava määritystiedostojen rivit, jotta voimme muokata jano o perl, samoin kuin poistamiseksi tiedämme jo, miten se tehdään sedillä sed

terveiset


Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

*

*

  1. Vastuussa tiedoista: Miguel Ángel Gatón
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.

  1.   mss-kehitys dijo

    Erittäin hyvä panos 😉

    1.    KZKG ^ Gaara dijo

      Kiitos

      Muuten, saimme sähköpostisi juuri nyt, vastaan ​​sinulle 😀

      terveiset

  2.   nimetön dijo

    Päätelaitteen, palvelimien ja ssh-yhteyksien ylipapina tulen luoksesi, oi loistava KZKG ^ Gaara, ja kysyn sinulta: mistä saan tietämättömyyteni tason opetusohjelman, jonka avulla voin käyttää kahden etälaitteen välisiä ssh-yhteyksiä eri verkoissa jakamiseen tekstitiedostot, pdf, kuva ja ääni (mp3)….

    🙂

    Vakavasti, voisitteko ohjata minua tässä suhteessa, minulla on kaksi konetta, yksi töissä ja toinen kotona, ja tarvitsen niiden välille ssh-yhteyden (koska kuten ymmärrän, ssh sallii sisällön jakamisen koneiden välillä, olenko oikeassa?).
    Ja jos olen väärässä, mitä sovellusta suosittelet?
    Ja mistä löydän tältä osin peruskurssin?

    1.    -piikkari- dijo

      scp

      scp käyttäjä @ koneen osoite: polku käyttäjä @ koneen osoite: polku.

      Sama syntakse kuin cp, lähde -> kohde.

  3.   f3niX dijo

    Ilmoitit miehelle, olet eksynyt.

  4.   Joaquin dijo

    Hyvä vinkki!

  5.   LycusHackerEmo dijo

    Mielenkiintoinen vinkki ... xD

    Tiedätkö satunnaisesti sellaisen, joka saa rohkean tekstin erottumaan?
    Tarkoitan, että minulla on txt-tiedosto, joka on sanakirja, siinä on yli 10000 riviä ja haluan sen korostavan tietyn tekstin ennen ":" - keskeytyskohtia ja tekemällä sen yksi kerrallaan on liikaa.

    1.    KZKG ^ Gaara dijo

      Hei,

      Txt-tiedosto on pelkkää tekstiä, kuten nimestä voi päätellä ... yksinkertainen, ilman muotoja tai vastaavaa, olen pahoillani, mutta luulen, että mitä kysyt, ei voi tehdä, eikö niin? 🙁

      terveiset

      1.    aca dijo

        itse asiassa se voi, mutta sinun on tiedettävä kohdemuoto.
        esim:
        echo $ (echo "Robert: Hei. Vaihda tänne" | sed 's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m /')
        se on selviytymisen asia.
        toinen tapa poistaa on sed '/' $ 1 '/ d', mutta sinun on oltava varma uudestaan.

        1.    LycusHackerEmo dijo

          lopeta sen tallentaminen kansioon * .odt

          Eikö ole helpompaa tapaa tehdä se LibreOfficen kanssa?

  6.   Lolo dijo

    Voisitko poistaa osan rivistä ja jättää loput?

    Oletetaan, että haluan poistaa kaiken sanan edestä tietyllä rivillä.

    Tai poista kaikki, jotka seuraavat sanaa.

    1.    aca dijo

      Kyllä, kyse on regexin vetämisestä (tarvittaessa mies sed -r, –regexp-extended)
      Alkaen siitä, mitä löydän
      kaiku «Robert: Hei. Vaihda täällä »| sed 's / Muuta //'
      hyvin määritellyllä kuviolla ja. (yksi merkki) ja * (useampi kuin yksi)
      Jälkeen:
      kaiku «Robert: Hei. Vaihda täällä »| sed 's / Change. * //'
      Ennen:
      kaiku «Robert: Hei. Vaihda täällä »| sed 's /. * Vaihda //'
      Jos sillä on merkitystä, että sana näkyy
      kaiku «Robert: Hei. Vaihda täällä »| sed 's / Muuta. * / Muuta /'
      tai monimutkaisempi
      rivillä, joka sisältää Robertin, mikä tapahtuu muutoksen jälkeen
      echo -e «Fritz: Hei. Muuta täällä \ nRobert: Hei. Vaihda täällä »| sed '/Robert/s/Cambio.*//'
      tai tykkää alusta alkaen poista toinen rivi ja käsittele loput
      echo -e «Fritz: Hei. Muuta täällä \ nRobert: Hei. Vaihda tähän \ nMuut »| sed -e 2d -e 's / Muuta. * //'
      echo -e «Fritz: Hei. Muuta täällä \ nRobert: Hei. Vaihda tähän \ nMuut »| sed '2d; s / Muuta. * //'

      1.    Lolo dijo

        Kiitos, se on minulle erittäin hyödyllinen.

  7.   MSX dijo

    Mukava artikkeli, josta pidän, kuinka mahtava SysAdmin!
    Mikä olisi elämämme ilman sed, awek, perl, grep, häntä, pää, "Emacs" ja niin monia muita tärkeitä työkaluja!

  8.   Lisbeth Ollarves dijo

    Kiitos, se oli erittäin hyödyllinen.

  9.   Pinssit dijo

    Hei, ja miten voit poistaa rivit 1,4 ja 10 saman komennon tiedostosta?