Kiel forigi specifajn liniojn de dosiero per sed

En iuj okazoj ni devas forigi specifan linion de dosiero aŭ pluraj, ekzemple, okazis al mi, ke mi havis tutan liston de dosieroj kaj mi devas forigi linion # 27 de ĉiuj ĉi (linio # 27 estas tio de ACL, normo, regulo, agordo), mi povas aŭ redakti dosieron post dosiero aŭ mi povas simple atingi tion, kion mi bezonas per la komando sed kaj bash-skripto (nedeviga).

Sed ni provu ununuran dosieron iom simplan.

Ni havas la dosieron distros-deb.txt kiu enhavas ĉi tion:

debian

ubuntu

archlinux

solusoj

mento

Tio estas la dosiero distros-deb.txt estas en kiu ni metos la Debian-bazitajn distrojn, sed tie ni vidas, ke en linio # 3 estas "archlinux", distro kiu evidente havas nenion komunan kun Debian, do ni devas forigi tiun linion. Por forigi linion # 3 de tiu dosiero ni metos la jenon:

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

Klarigi ĉi tiun linion estas iom facile, kun soifa "3d" ni indikas, ke ni forigos linion # 3, kun distros-deb.txt Ni indikas kian dosieron labori, tio estas, forigu linion # 3 de ĉi tiu dosiero, ĝis ĉi tie se ni premas Enter ĝi montros al ni kion ni volas sed en la terminalo, do kun > distros-deb-ok.txt ni indikas, ke anstataŭ montri la rezulton en terminalo, ke ĝi metis ĝin en dosieron kun ĉi tiu nomo.

Kio estas simpla?

Ankaŭ ni povas eviti uzi la > distros-deb-ok.txt uzante taŭgan parametron de sed, la parametro -i

Tio estas, se ni volas forigi la linion de la dosiero kaj konservi ĝin kun la sama nomo (kaj ne en alia dosiero), simple aldonu la parametron -i :

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

Ĉi tio forigos linion # 3 de distros-deb.txt kaj konservos ĝin.

Kio se mi volas gamon da linioj, tio estas forigi linion # 3 sed ankaŭ # 4 kaj # 5? Por atingi tion ni metas la gamon de 3 ĝis 5, tio estas:

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

Kaj ĝi montros al mi nur debian kaj kubuntu 😀

Do se mi volas forigi de linio 2 ĝis la lasta, kiam mi ne scias la totalajn liniojn?

Simple uzu la dolaran simbolon - »$

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

Se vi volas forigi de la unua linio al # 4, tiam ni simple metu la valoron 1 komence:

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

Ĉi tio estis ĉio, tre utila konsilo, kiam vi volas fari bash-skriptojn por aŭtomatigi taskojn kaj vi bezonas modifi kaj forigi liniojn de agordaj dosieroj, por modifi ni povas uzi sed o perl, same kiel forigi, ni jam scias kiel fari ĝin kun sed 😉

salutoj


La enhavo de la artikolo aliĝas al niaj principoj de redakcia etiko. Por raporti eraron alklaku Ĉi tie.

16 komentoj, lasu la viajn

Lasu vian komenton

Via retpoŝta adreso ne estos eldonita.

*

*

  1. Respondeculo pri la datumoj: Miguel Ángel Gatón
  2. Celo de la datumoj: Kontrola SPAM, administrado de komentoj.
  3. Legitimado: Via konsento
  4. Komunikado de la datumoj: La datumoj ne estos komunikitaj al triaj krom per laŭleĝa devo.
  5. Stokado de datumoj: Datumbazo gastigita de Occentus Networks (EU)
  6. Rajtoj: Iam ajn vi povas limigi, retrovi kaj forigi viajn informojn.

  1.   mss-devel diris

    Tre bona kontribuo 😉

    1.    KZKG ^ Gaara diris

      Dankon 🙂

      Cetere, ni ricevis vian retpoŝton nun mi respondas al vi 😀

      salutoj

  2.   sennomaj diris

    Kiel ĉefpastro de la fina stacio, serviloj kaj ssh-konektoj mi venas al vi, ho bonega KZKG ^ Gaara, kaj mi demandas vin: kie mi povas akiri lernilon laŭ mia nescio, kiu permesas al mi uzi ssh-ligojn inter du foraj maŝinoj en diversaj retoj por dividi tekstdosierojn, pdf, bildon kaj sonon (mp3) ....

    🙂

    Serioze, ĉu vi povus gvidi min tiurilate, mi havas du maŝinojn, unu ĉe laboro kaj unu hejme kaj mi bezonas ssh-ligon inter ili (ĉar laŭ mia kompreno, ssh permesas dividi enhavon inter maŝinoj, ĉu mi pravas? ).
    Kaj se mi eraras, kian programon vi rekomendas?
    Kaj kie mi trovas bazan lernilon tiurilate?

    1.    -spyker- diris

      scp

      scp uzanto @ adreso_maŝino: vojo uzanto @ adreso_maŝino: vojo.

      Sama sintakso kiel cp, fonto -> celloko.

  3.   f3niX diris

    Vi aperis viro, vi perdiĝis.

  4.   Joakimo diris

    Bona Konsilo!

  5.   LycusHackerEmo diris

    Interesa konsilo ... xD

    hazarde vi ne konas iun, kiu distingas aŭdacan tekston?
    Mi volas diri, ke mi havas txt-dosieron, kiu estas vortaro, ĝi havas pli ol 10000 liniojn kaj mi volas, ke ĝi reliefigu certan tekston antaŭ la ":" pendaj punktoj kaj fari ĝin unu post la alia estas tro multe.

    1.    KZKG ^ Gaara diris

      saluton,

      Teksta dosiero estas simpla teksto, kiel ĝia nomo implicas ... simpla, sen formatoj aŭ io simila, mi bedaŭras, sed mi ne pensas, ke tio, kion vi petas, povas esti farita, ĉu ne? 🙁

      salutoj

      1.    ACA diris

        efektive ĝi povas, sed vi devus scii la cellokan formaton.
        ekz:
        echo $ (eoo "Roberto: Saluton. Ŝanĝu ĉi tie" | sed 's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m /')
        temas pri eltenado.
        la alia maniero forigi uzeblan estas sed '/' $ 1 '/ d' sed vi devas esti certa pri la re.

        1.    LycusHackerEmo diris

          tiam finu konservi ĝin en * .odt

          Ĉu ne ekzistas pli facila maniero fari ĝin per LibreOffice?

  6.   lolo diris

    Ĉu vi povus forigi parton de linio kaj forlasi la reston?

    Ni diru, ke mi volas forigi ĉion antaŭ vorto en certa vico.

    Aŭ forigu ĉion, kio sekvas tiun vorton.

    1.    ACA diris

      Jes, temas pri tirado de regex (se necese man sed -r, –regexp-Extended)
      Komencante de tio, kion mi trovas
      eoo «Robert: Saluton. Ŝanĝu ĉi tie »| sed 's / Ŝanĝi //'
      kun bone difinita ŝablono kaj kun. (unu signo) kaj * (pli ol unu)
      Post:
      eoo «Robert: Saluton. Ŝanĝu ĉi tie »| sed / Ŝanĝi. * // '
      Antaŭe:
      eoo «Robert: Saluton. Ŝanĝu ĉi tie »| sed 's /. * Ŝanĝi //'
      Se gravas, ke la vorto aperas
      eoo «Robert: Saluton. Ŝanĝu ĉi tie »| sed / Ŝanĝi. * / Ŝanĝi / '
      aŭ pli ellaborita
      en la linio enhavanta Robert kio sekvas Ŝanĝon
      eoo -e «Fritz: Saluton. Ŝanĝu ĉi tie \ nRoberto: Saluton. Ŝanĝu ĉi tie »| sed '/Robert/s/Cambio.*//'
      aŭ kiel ĉe la komenco elprenu la duan linion kaj prilaboru la reston
      eoo -e «Fritz: Saluton. Ŝanĝu ĉi tie \ nRoberto: Saluton. Ŝanĝu ĉi tie \ nAliajn »| sed -e 2d -e 's / Ŝanĝo. * //'
      eoo -e «Fritz: Saluton. Ŝanĝu ĉi tie \ nRoberto: Saluton. Ŝanĝu ĉi tie \ nAliajn »| sed '2d; s / Change. * //'

      1.    lolo diris

        Dankon, ĝi tre utilas al mi.

  7.   MSX diris

    Bela artikolo, tiuj, kiujn mi ŝatas, kiel bonega SysAdmin!
    Kio estus nia vivo sen sed, awek, perl, grep, tail, head, "Emakso" kaj tiom multaj aliaj esencaj iloj!?

  8.   Lisbeth Ollarves diris

    Dankon, ĝi estis tre helpema.

  9.   Perni diris

    Saluton, kaj kiel vi povus forigi liniojn 1,4 kaj 10 de dosiero en la sama komando?