Ako odstrániť konkrétne riadky zo súboru pomocou programu sed

Pri určitých príležitostiach musíme vymazať konkrétny riadok zo súboru alebo z viacerých, napríklad sa mi stalo, že som mal celý zoznam súborov a musím vymazať riadok 27 všetkých týchto (riadok 27 je ten, že ACL, norma, pravidlo, konfigurácia), môžem buď editovať súbor po súbore, alebo len dosiahnem to, čo potrebujem, pomocou príkazu smäd a bash skript (voliteľný).

Vyskúšajme však trochu jednoduchý súbor.

Máme spis distros-deb.txt ktorý obsahuje toto:

debian

kubuntu

Arch Linux

solúzy

mäta

Inými slovami spis distros-deb.txt je miesto, do ktorého vložíme distribúcie založené na Debiane, ale vidíme, že v riadku 3 je „archlinux“, distro, ktoré zjavne nemá nič spoločné s Debianom, takže musíme tento riadok vylúčiť. Aby sme vylúčili riadok 3 tohto súboru, vložíme nasledovné:

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

Vysvetlenie tohto riadku je trochu jednoduché smädný „3d“ naznačujeme, že odstránime riadok # 3 s distros-deb.txt Označíme, na ktorom súbore máme pracovať, to znamená, že vymažeme riadok č. 3 tohto súboru, až sem stlačíme Enter, ukáže nám, čo chceme, ale v termináli, > distros-deb-ok.txt naznačujeme, že namiesto zobrazenia výsledku v termináli ho vložil do súboru s týmto názvom.

Čo je jednoduché?

Tiež sa môžeme vyhnúť použitiu > distros-deb-ok.txt pomocou správneho parametra smäd, parameter -i

To znamená, že ak chceme zo súboru odstrániť riadok a uložiť ho s rovnakým názvom (a nie do iného súboru), jednoducho pridáme parameter -i :

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

Týmto sa odstráni riadok č. 3 z distros-deb.txt a uloží sa.

Čo ak chcem rozsah riadkov, to znamená odstránenie riadku # 3, ale aj # 4 a # 5? Aby sme to dosiahli, dali sme rozsah od 3 do 5, to znamená:

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

A ukáže mi to iba debian a kubuntu 😀

No a čo ak chcem vymazať z riadku 2 do posledného, ​​keď neviem súčet riadkov?

Stačí použiť symbol dolára - »$

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

Ak chcete vylúčiť z prvého riadku na # 4, potom jednoducho dáme hodnotu 1 na začiatok:

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

To bolo všetko, veľmi užitočný tip, keď chcete vytvárať bash skripty na automatizáciu úloh a potrebujete upraviť a vylúčiť riadky konfiguračných súborov, ktoré môžeme použiť smäd o perl, ako aj na elimináciu už vieme, ako na to so sed 😉

pozdravy


Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Zodpovedný za údaje: Miguel Ángel Gatón
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.

  1.   mss-devel dijo

    Veľmi dobrý príspevok 😉

    1.    KZKG ^ Gaara dijo

      Ďakujem vám

      Mimochodom, váš e-mail sme dostali práve teraz, odpoviem vám 😀

      pozdravy

  2.   bezmenný dijo

    Ako veľkňaz terminálu, serverov a pripojení ssh k vám prichádzam, ó, skvelé KZKG ^ Gaara, a pýtam sa vás: kde získam návod na úrovni mojej nevedomosti, ktorý mi umožňuje používať ssh spojenie medzi dvoma vzdialenými strojmi v rôznych sieťach zdieľať textové súbory, pdf, obrázky a zvuk (mp3)….

    ????

    Vážne, mohli by ste ma v tomto smere usmerniť, mám dva stroje, jeden v práci a jeden doma a potrebujem medzi nimi spojenie ssh (pretože ako to chápem, ssh umožňuje zdieľanie obsahu medzi strojmi, mám pravdu? ).
    A ak sa mylim, aku aplikaciu odporucate?
    A kde nájdem v tejto súvislosti základný návod?

    1.    -spyker- dijo

      scp

      scp user @ machine_address: cesta user @ machine_address: cesta.

      Rovnaká syntax ako cp, zdroj -> cieľ.

  3.   f3niX dijo

    Ukázal si človeka, bol si stratený.

  4.   Joaquin dijo

    Dobrý tip!

  5.   LycusHackerEmo dijo

    Zaujímavý tip ... xD

    Poznáte náhodou taký, vďaka ktorému vynikne tučný text?
    Myslím, že mám súbor txt, ktorý je slovníkom, má viac ako 10000 XNUMX riadkov a chcem, aby zvýraznil určitý text pred bodmi pozastavenia „:“ a robiť jeden po druhom je príliš veľa.

    1.    KZKG ^ Gaara dijo

      Dobrý deň,

      Súbor txt je obyčajný text, ako už z názvu vyplýva ... prostý, bez formátov alebo podobného, ​​je mi ľúto, ale myslím si, že to, čo sa pýtate, sa nedá urobiť, však? 🙁

      pozdravy

      1.    ACA dijo

        vlastne to môže, ale museli by ste poznať cieľový formát.
        napr .:
        echo $ (echo "Robert: Hello. Change here" | sed 's / \ ./. \\ e [40; 31 m /; s / \: /: \\ e [40; 35 m /')
        je to otázka zvládnutia.
        ďalším spôsobom odstránenia, ktorý je možné použiť, je sed '/' $ 1 '/ d', musíte si však byť istí re.

        1.    LycusHackerEmo dijo

          potom dokončite uloženie v * .odt

          Nie je ľahší spôsob, ako to urobiť pomocou LibreOffice?

  6.   Lolo dijo

    Mohli by ste odstrániť časť riadku a zvyšok nechať?

    Povedzme, že chcem vymazať všetko pred slovom v určitom riadku.

    Alebo vymažte všetko, čo nasleduje za týmto slovom.

    1.    ACA dijo

      Áno, ide o vytiahnutie regulárneho výrazu (v prípade potreby človek sed -r, –regexp-extended)
      Počnúc tým, čo nájdem
      ozvena «Robert: Dobrý deň. Zmeniť tu »| sed 's / Zmeniť //'
      s presne určeným vzorom a s. (jeden znak) a * (viac ako jeden)
      potom:
      ozvena «Robert: Dobrý deň. Zmeniť tu »| sed 's / Zmeniť. * //'
      Pred:
      ozvena «Robert: Dobrý deň. Zmeniť tu »| sed 's /. * Zmeniť //'
      Ak je to dôležité, slovo sa objaví
      ozvena «Robert: Dobrý deň. Zmeniť tu »| sed 's / Zmena. * / Zmena /'
      alebo zložitejšie
      v riadku obsahujúcom Roberta, čo nasleduje po zmene
      echo -e «Fritz: Dobrý deň. Zmeniť tu \ nRobert: Dobrý deň. Zmeniť tu »| sed '/Robert/s/Cambio.*//'
      alebo ako na začiatku vytiahnite druhý riadok a spracujte zvyšok
      echo -e «Fritz: Dobrý deň. Zmeniť tu \ nRobert: Dobrý deň. Zmeniť tu \ nĎalšie »| sed -e 2d -e 's / Zmeniť. * //'
      echo -e «Fritz: Dobrý deň. Zmeniť tu \ nRobert: Dobrý deň. Zmeniť tu \ nĎalšie »| sed '2d; s / Zmeniť. * //'

      1.    Lolo dijo

        Ďakujem, je to pre mňa veľmi užitočné.

  7.   MSX dijo

    Pekný článok, tie, ktoré sa mi páčia, aký skvelý je SysAdmin!
    Aký by bol náš život bez sed, awek, perl, grep, tail, head, „Emacs“ a toľkých ďalších základných nástrojov!?

  8.   Lisbeth Ollarvesová dijo

    Ďakujem, bolo to veľmi užitočné.

  9.   Špendlíky dijo

    Dobrý deň, a ako by ste mohli vymazať zo súboru riadky 1,4 a 10 v rovnakom príkaze?