Si të fshini linja specifike nga një skedar duke përdorur sed

Në raste të caktuara duhet të fshijmë një rresht specifik nga një skedar ose disa, për shembull, më ka ndodhur që të kisha një listë të plotë skedarësh dhe duhet të fshij rreshtin # 27 nga të gjitha këto (rreshti # 27 është ai i një ACL , normë, rregull, konfigurim), ose mund të modifikoj skedar pas skedari ose thjesht mund të arrij atë që më duhet duke përdorur komandën etje dhe një skenar bash (opsional).

Por, le të provojmë një skedar të vetëm disi të thjeshtë.

Ne kemi dosjen distros-deb.txt që përmban këtë:

Debian

kubuntu

archlinux

solucione

nenexhik

Kjo është, dosja distros-deb.txt është në të cilën ne do të vendosim distros me bazë Debian, por atje shohim se në rreshtin # 3 ekziston "archlinux", një distro që padyshim nuk ka asnjë lidhje me Debian, kështu që ne duhet ta eliminojmë atë linjë. Për të eleminuar rreshtin # 3 të asaj skedari do të vendosim sa vijon:

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

Shpjegimi i kësaj linje është disi i lehtë, me i etur "3d" ne po tregojmë se do të fshijmë rreshtin # 3, me distros-deb.txt Ne tregojmë se në çfarë skedari duhet të punojmë, d.m.th., fshini rreshtin # 3 të këtij skedari, deri këtu nëse shtypim Enter do të na tregojë se çfarë duam, por në terminal, kështu që me > distros-deb-ok.txt ne po tregojmë se në vend që të tregojë rezultatin në terminal, se e vendos atë në një skedar me këtë emër.

Çfarë është e thjeshtë?

Gjithashtu, ne mund të shmangim përdorimin e > distros-deb-ok.txt duke përdorur një parametër të duhur të etje, parametri -i

Kjo është, në rast se duam të heqim vijën nga skedari dhe ta ruajmë me të njëjtin emër (dhe jo në një skedar tjetër), thjesht shtoni parametrin -i :

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

Kjo do të heqë rreshtin # 3 nga distros-deb.txt dhe do ta ruajë atë.

Po sikur të dua një sërë vijash, që do të thotë të heq rreshtin # 3, por edhe # 4 dhe # 5? Për të arritur këtë ne vendosim diapazonin nga 3 në 5, domethënë:

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

Dhe do të më tregojë vetëm debian dhe kubuntu

Pra, çfarë nëse unë dua të fshij nga rreshti 2 në atë të fundit, kur nuk i di linjat totale?

Thjesht përdorni simbolin e dollarit - »$

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

Në rast se doni të eleminoni nga rreshti i parë në # 4, atëherë ne thjesht vendosim vlerën 1 në fillim:

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

Kjo ka qenë gjithçka, një këshillë shumë e dobishme kur dëshironi të bëni skenare bash për të automatizuar detyrat dhe duhet të modifikoni dhe eleminoni linjat e skedarëve të konfigurimit, për të modifikuar që mund të përdorim etje o perl, si dhe për të eleminuar ne tashmë dimë se si ta bëjmë atë me sed

të fala


Përmbajtja e artikullit i përmbahet parimeve tona të etika editoriale. Për të raportuar një gabim klikoni këtu.

16 komente, lini tuajën

Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: Miguel Ángel Gatón
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.

  1.   mss-zhvesh dijo

    Kontribut shumë i mirë

    1.    KZKG ^ Gaara dijo

      Faleminderit

      Nga rruga, ne kemi marrë emailin tuaj tani unë do t'ju përgjigjem ...

      të fala

  2.   pa emër dijo

    Si prift i lartë i terminalit, serverave dhe lidhjeve ssh unë vij tek ju, o i madh KZKG ^ Gaara, dhe ju pyes: ku mund të gjej një tutorial në nivelin e injorancës sime që më lejon të përdor lidhjet ssh midis dy makinave të largëta në rrjete të ndryshme për të ndarë skedarë teksti, pdf, imazh dhe tingull (mp3).

    🙂

    Seriozisht, a mund të më udhëzoni në këtë drejtim, unë kam dy makina, një në punë dhe një në shtëpi dhe kam nevojë për një lidhje ssh midis tyre (sepse siç e kuptoj, ssh lejon që përmbajtja të ndahet midis makinerive, apo jo?).
    Dhe nëse gaboj, çfarë aplikacioni rekomandoni?
    Dhe ku mund të gjej një udhëzim bazë në këtë drejtim?

    1.    -spiuner- dijo

      scp

      përdoruesi i scp @ machine_address: përdoruesi i shtegut @ machine_address: shtegu.

      Sintaksa e njëjtë me cp, burimi -> destinacioni.

  3.   F3niX dijo

    Je shfaqur njeri, ke humbur.

  4.   Joaquin dijo

    Këshillë e mirë!

  5.   LycusHackerEmo dijo

    Këshillë interesante… xD

    A ndodh që të njihni një që e bën të dallojë tekstin e guximshëm?
    Dua të them, unë kam një skedar txt që është një fjalor, ka më shumë se 10000 rreshta dhe dua që ai të nxjerrë në pah një tekst të caktuar para pikave të pezullimit ":" dhe ta bësh një nga një është shumë.

    1.    KZKG ^ Gaara dijo

      Përshëndetje,

      Një skedar txt është tekst i thjeshtë, siç nënkupton edhe emri i saj ... i thjeshtë, pa formate ose ndonjë gjë të ngjashme, më vjen keq por nuk mendoj se mund të bëhet ajo që kërkoni ju, apo jo? 🙁

      të fala

      1.    AKK dijo

        në të vërtetë mund, por duhet të dini formatin e destinacionit.
        p.sh:
        jehonë $ (jehonë "Robert: Përshëndetje. Ndrysho këtu" | sed's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m / ')
        është çështje e përballimit.
        mënyra tjetër për të fshirë që mund të përdoret është sed '/' $ 1 '/ d' por duhet të jesh i sigurt për ri.

        1.    LycusHackerEmo dijo

          atëherë përfundoni ta ruani në * .odt

          A nuk ka ndonjë mënyrë më të lehtë për ta bërë atë me LibreOffice?

  6.   lol dijo

    Mund të fshini një pjesë të një linje dhe të lini pjesën tjetër?

    Le të themi se dua të fshij gjithçka përpara një fjale në një rresht të caktuar.

    Ose fshini gjithçka që ndjek atë fjalë.

    1.    AKK dijo

      Po, është çështje e tërheqjes së një regex (nëse është e nevojshme njeriu sed -r, –regexp-zgjatur)
      Duke filluar nga ajo që gjej
      jehonë «Robert: Përshëndetje. Ndrysho këtu »| sed / Ndryshimi // '
      me një model të përcaktuar mirë dhe me. (një personazh) dhe * (më shumë se një)
      Pas:
      jehonë «Robert: Përshëndetje. Ndrysho këtu »| sed / Ndrysho. * // '
      Para:
      jehonë «Robert: Përshëndetje. Ndrysho këtu »| sed 's /. * Ndrysho //'
      Nëse është e rëndësishme që fjala të shfaqet
      jehonë «Robert: Përshëndetje. Ndrysho këtu »| sed / Ndrysho. * / Ndrysho / '
      ose më të përpunuar
      në vijën që përmban Robert çfarë shkon pas Ndryshimit
      jehonë -e «Fritz: Përshëndetje. Ndrysho këtu \ nRobert: Përshëndetje. Ndrysho këtu »| sed '/Robert/s/Cambio.*//'
      ose si në fillim nxirrni rreshtin e dytë dhe përpunoni pjesën tjetër
      jehonë -e «Fritz: Përshëndetje. Ndrysho këtu \ nRobert: Përshëndetje. Ndrysho këtu \ nTjetër »| sed -e 2d -e's / Ndrysho. * // '
      jehonë -e «Fritz: Përshëndetje. Ndrysho këtu \ nRobert: Përshëndetje. Ndrysho këtu \ nTjetër »| sed '2d; s / Ndrysho. * //'

      1.    lol dijo

        Faleminderit, është shumë e dobishme për mua.

  7.   MSX dijo

    Artikull i bukur, nga të cilët më pëlqen, sa i shkëlqyeshëm është SysAdmin!
    Cila do të ishte jeta jonë pa sed, awek, perl, grep, bisht, kokë, "Emacs" dhe kaq shumë mjeteve të tjera thelbësore!?

  8.   Lisbeth Ollarves dijo

    Faleminderit, ishte shumë e dobishme.

  9.   Perni dijo

    Përshëndetje, dhe si mund t'i fshini linjat 1,4 dhe 10 në të njëjtën komandë nga një skedar?