Konkrét sorok törlése egy fájlból sed használatával

Bizonyos esetekben törölnünk kell egy adott sort egy vagy több fájlból, például velem történt, hogy teljes fájllistám volt, és mindezekből a 27. sort törölnöm kell (a 27. sor az ACL sora. , norm, szabály, konfiguráció), vagy fájlról fájlra szerkeszthetem, vagy a parancs segítségével elérhetem azt, amire szükségem van szomjúság és egy bash szkript (opcionális).

De próbálkozzunk egy egyszerű fájllal.

Megvan az irat distros-deb.txt amely ezt tartalmazza:

debian

ubuntu

archlinux

solusok

menta

Vagyis a fájl distros-deb.txt a Debian-alapú disztribúciókat fogjuk elhelyezni, de ott látjuk, hogy a 3. sorban az "archlinux" szerepel, egy disztró, amelynek nyilvánvalóan semmi köze nincs a Debianhoz, ezért ezt a sort meg kell szüntetnünk. A fájl 3. sorának kiküszöbölésére a következőket tesszük:

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

Ennek a vonalnak a megmagyarázása kissé egyszerű, a szomjúság "3d" jelezzük, hogy a 3. sor törlése a distros-deb.txt Jelöljük, hogy melyik fájlon dolgozzunk, vagyis töröljük a fájl 3. sorát, egészen ide, ha megnyomjuk az Enter billentyűt , akkor megmutatja, hogy mit akarunk, de a terminálban, tehát > distros-deb-ok.txt azt jelezzük, hogy ahelyett, hogy az eredményt a terminálban mutatnánk, egy ilyen nevű fájlba tegyük.

Mi az egyszerű?

Ezenkívül elkerülhetjük a > distros-deb-ok.txt megfelelő paraméterének felhasználásával szomjúság, a paraméter -i

Vagyis abban az esetben, ha el akarjuk távolítani a sort a fájlból, és ugyanazzal a névvel mentjük (és nem egy másik fájlba), egyszerűen adjuk hozzá a paramétert -i :

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

Ez eltávolítja a 3. sort a distros-deb.txt fájlból és elmenti.

Mi van, ha egy sor tartományt szeretnék, vagyis a # 3, de a # 4 és az # 5 sor eltávolítását is? Ennek elérése érdekében a 3 és 5 közötti tartományt tesszük, vagyis:

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

És csak a debiánt és a kubuntut mutatja 😀

Tehát mi van, ha törölni akarok a 2. sorból az utolsóba, amikor nem ismerem a teljes sort?

Csak használja a dollár szimbólumot - »$

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

Abban az esetben, ha ki akarsz küszöbölni az első sorból a # 4-be, akkor egyszerűen az 1 értéket tesszük az elejére:

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

Ez minden volt, nagyon hasznos tipp, amikor bash szkripteket akarsz készíteni a feladatok automatizálásához, és módosítanod kell, és ki kell küszöbölnöd a konfigurációs fájlok sorait, hogy módosíthassuk szomjúság o perl, valamint annak kiküszöbölése érdekében már tudjuk, hogyan kell csinálni a sed 😉-vel

Üdvözlet


16 hozzászólás, hagyd a tiedet

Hagyja megjegyzését

E-mail címed nem kerül nyilvánosságra. Kötelező mezők vannak jelölve *

*

*

  1. Az adatokért felelős: Miguel Ángel Gatón
  2. Az adatok célja: A SPAM ellenőrzése, a megjegyzések kezelése.
  3. Legitimáció: Az Ön beleegyezése
  4. Az adatok közlése: Az adatokat csak jogi kötelezettség alapján továbbítjuk harmadik felekkel.
  5. Adattárolás: Az Occentus Networks (EU) által üzemeltetett adatbázis
  6. Jogok: Bármikor korlátozhatja, helyreállíthatja és törölheti adatait.

  1.   mss-devel dijo

    Nagyon jó hozzájárulás 😉

    1.    KZKG ^ Gaara dijo

      Köszönöm

      Egyébként most kaptuk az e-mailt, válaszolok you

      Üdvözlet

  2.   névtelen dijo

    A terminál, a szerverek és az ssh kapcsolatok főpapjaként eljövök hozzád, ó, nagyszerű KZKG ^ Gaara, és megkérdezem tőled: hol szerezhetek olyan ismeretterjesztő oktatóanyagot, amely lehetővé teszi számomra, hogy két távoli gép között használjam az ssh kapcsolatokat különböző hálózatokon szöveges fájlok, pdf, kép és hang (mp3) megosztására…

    ????

    Komolyan, tudna-e útmutatást adni ebben a tekintetben, nekem két gépem van, egy a munkahelyemen és egy otthon, és szükségem van egy ssh kapcsolatra közöttük (mert ahogy megértem, az ssh lehetővé teszi a tartalom megosztását a gépek között, igazam van?).
    És ha tévedek, milyen alkalmazást javasol?
    És hol találok egy alapvető oktatóanyagot ezzel kapcsolatban?

    1.    -tüskés- dijo

      scp

      scp felhasználó @ gép_cím: elérési út felhasználó @ gép_cím: elérési út.

      Ugyanaz a szintaxis, mint a cp, forrás -> cél.

  3.   f3niX dijo

    Megmutatta az embert, elveszett.

  4.   Joaquin dijo

    Jó tipp!

  5.   LycusHackerEmo dijo

    Érdekes tipp ... xD

    véletlenül nem ismer olyan embert, amely kiemeli a félkövér szöveget?
    Úgy értem, hogy van egy txt fájlom, amely egy szótár, több mint 10000 XNUMX sorból áll, és szeretném, ha bizonyos szöveget kiemelne a ":" felfüggesztési pontok előtt, és egyenként megtenni túl sok.

    1.    KZKG ^ Gaara dijo

      Helló,

      A txt fájl sima szöveg, amint a neve is mutatja ... sima, formátumok vagy bármi hasonló nélkül, sajnálom, de azt hiszem, hogy amit kérsz, nem lehet megtenni, nem? 🙁

      Üdvözlet

      1.    aca dijo

        valójában képes, de tudnia kell a cél formátumát.
        például:
        echo $ (echo "Robert: Helló. Változás itt" | sed 's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m /')
        a boldogulás kérdése.
        a másik használható törlési mód a sed '/' $ 1 '/ d', de a re-ben biztosnak kell lennie.

        1.    LycusHackerEmo dijo

          majd fejezze be a mentését a * .odt fájlban

          Nincs egyszerűbb módja a LibreOffice-nak?

  6.   Lolo dijo

    Törölhetne egy sor egy részét, a többit pedig elhagyhatja?

    Tegyük fel, hogy mindent el akarok törölni egy szó előtt egy bizonyos sorból.

    Vagy töröljön mindent, ami ezt a szót követi.

    1.    aca dijo

      Igen, ez egy regex meghúzásának kérdése (ha szükséges, ember sed -r, –regexp-extended)
      Abból kiindulva, amit találok
      visszhang «Robert: Helló. Változás itt »| sed 's / Change //'
      jól definiált mintával és azzal. (egy karakter) és * (több)
      akkor:
      visszhang «Robert: Helló. Változás itt »| sed 's / Change. * //'
      Előtt:
      visszhang «Robert: Helló. Változás itt »| sed 's /. * Változás //'
      Ha számít, hogy a szó megjelenik
      visszhang «Robert: Helló. Változás itt »| sed 's / Change. * / Change /'
      vagy bonyolultabb
      abban a sorban, amely Robertet tartalmazza, ami a Változás után megy
      echo -e «Fritz: Helló. Változás itt \ nRobert: Helló. Változás itt »| sed '/Robert/s/Cambio.*//'
      vagy mint az elején vegye ki a második sort, és dolgozza fel a többit
      echo -e «Fritz: Helló. Változás itt \ nRobert: Helló. Változás itt \ nEgyéb »| sed -e 2d -e 's / Change. * //'
      echo -e «Fritz: Helló. Változás itt \ nRobert: Helló. Változás itt \ nEgyéb »| sed '2d; s / Change. * //'

      1.    Lolo dijo

        Köszönöm, nagyon hasznos számomra.

  7.   MSX dijo

    Kedves cikk, azok, amelyeket szeretek, milyen nagyszerű a SysAdmin!
    Mi lenne az életünk sed, awek, perl, grep, farok, fej, "Emacs" és még sok más nélkülözhetetlen eszköz nélkül?

  8.   Lisbeth Ollarves dijo

    Köszönöm, nagyon hasznos volt.

  9.   Csapok dijo

    Helló, és hogyan lehetne törölni az 1,4 és 10 sort egy fájlból ugyanabban a parancsban?