Kā izdzēst konkrētas rindas no faila, izmantojot sed

Dažos gadījumos mums ir jāizdzēš konkrēta rinda no faila vai vairāki, piemēram, man ir gadījies, ka man ir bijis vesels failu saraksts, un man ir jāizdzēš 27. rinda no visiem šiem (27. rindiņa ir tāda, ka (ACL, norma, noteikums, konfigurācija), es varu vai nu rediģēt failu pēc faila, vai arī varu vienkārši sasniegt nepieciešamo, izmantojot komandu slāpes un bash skripts (pēc izvēles).

Mēģināsim nedaudz vienkāršu failu.

Mums ir fails distros-deb.txt kas satur šo:

Debian

kubuntu

Archlinux

solus

piparmētra

Citiem vārdiem sakot, fails distros-deb.txt ir tas, kurā mēs ievietosim Debian balstītas distros, bet tur mēs redzam, ka 3. rindā ir "archlinux", distro, kam acīmredzami nav nekāda sakara ar Debian, tāpēc mums šī līnija ir jānovērš. Lai novērstu šī faila 3. rindiņu, mēs ievietosim:

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

Izskaidrot šo rindu ir nedaudz viegli, izmantojot slāpes "3d" mēs norādām, ka izdzēsīsim 3. rindiņu ar distros-deb.txt Mēs norādām, pie kura faila strādāt, tas ir, izdzēsiet šī faila 3. rindiņu, līdz šeit, ja mēs nospiedīsim Enter, tas mums parādīs, ko mēs vēlamies, bet terminālā, tāpēc ar > distros-deb-ok.txt mēs norādām, ka tā vietā, lai parādītu rezultātu terminālā, to ievieto failā ar šo nosaukumu.

Kas ir vienkāršs?

Tāpat mēs varam izvairīties no > distros-deb-ok.txt izmantojot pareizu parametru slāpes, parametrs -i

Tas ir, ja mēs vēlamies izdzēst līniju no faila un saglabāt to ar tādu pašu nosaukumu (nevis citā failā), vienkārši pievienojiet parametru -i :

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

Tas noņems 3. līniju no distros-deb.txt un saglabās to.

Ko darīt, ja es vēlos virkni līniju, tas ir, noņemt 3. līniju, bet arī 4. un 5. līniju? Lai to panāktu, mēs ievietojam diapazonu no 3 līdz 5, tas ir:

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

Un tas man parādīs tikai debian un kubuntu 😀

Ko darīt, ja es vēlos izdzēst no 2. rindas uz pēdējo, kad nezinu kopējo rindu skaitu?

Vienkārši izmantojiet dolāra simbolu - »$

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

Gadījumā, ja vēlaties izslēgt no pirmās rindas uz # 4, tad sākumā vienkārši ievietojam vērtību 1:

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

Tas ir bijis viss, ļoti noderīgs padoms, kad vēlaties izveidot bash skriptus, lai automatizētu uzdevumus, un jums ir jāpārveido un jānoņem konfigurācijas failu rindas, lai modificētu, ko mēs varam izmantot slāpes o Perl, kā arī lai novērstu, mēs jau zinām, kā to izdarīt ar sed 😉

Sveicieni


Raksta saturs atbilst mūsu principiem redakcijas ētika. Lai ziņotu par kļūdu, noklikšķiniet uz šeit.

16 komentāri, atstājiet savus

Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.

  1.   mss-devel teica

    Ļoti labs ieguldījums 😉

    1.    KZKG ^ Gaara teica

      Paldies

      Starp citu, mēs tūlīt saņēmām jūsu e-pastu, es jums atbildu 😀

      Sveicieni

  2.   bez nosaukuma teica

    Kā termināļa, serveru un ssh savienojumu augstais priesteris, es nāku pie jums, ak, lieliski, KZKG ^ Gaara, un es jums jautāju: kur es varu iegūt apmācību savas nezināšanas līmenī, kas ļauj man izmantot ssh savienojumus starp divām attālajām mašīnām dažādos tīklos, lai koplietotu teksta failus, pdf, attēlu un skaņu (mp3) ...

    ????

    Nopietni, vai jūs varētu mani vadīt šajā sakarā, man ir divas mašīnas, viena darbā un viena mājās, un man starp tām ir nepieciešams ssh savienojums (jo, kā es saprotu, ssh ļauj saturu koplietot starp mašīnām, vai es kļūdos?
    Un, ja es kļūdos, kādu lietojumprogrammu jūs iesakāt?
    Un kur es varu atrast pamata apmācību šajā sakarā?

    1.    -smidzinātājs, teica

      scp.

      scp user @ machine_address: ceļš user @ machine_address: ceļš.

      Tāda pati sintakse kā cp, avots -> galamērķis.

  3.   F3niX teica

    Jūs parādījāt cilvēku, jūs esat apmaldījies.

  4.   Joaquin teica

    Labs padoms!

  5.   LycusHackerEmo teica

    Interesants padoms ... xD

    nejauši jūs nezināt tādu, kas izceļ treknraksta tekstu?
    Es domāju, ka man ir txt fails, kas ir vārdnīca, tajā ir vairāk nekā 10000 XNUMX rindiņu, un es vēlos, lai tas izceļ noteiktu tekstu pirms ":" punktu apturēšanas un to izdarīšanas pa vienam ir par daudz.

    1.    KZKG ^ Gaara teica

      Hello,

      Txt fails ir vienkāršs teksts, kā norāda nosaukums ... vienkāršs, bez formātiem vai līdzīga, piedodiet, bet es domāju, ka to, ko jūs lūdzat, nevar izdarīt, vai ne? 🙁

      Sveicieni

      1.    aca teica

        patiesībā tā var, bet jums būtu jāzina galamērķa formāts.
        piem .:
        echo $ (atbalss "Roberts: Sveiki. Mainies šeit" | sed 's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m /')
        tas ir tikt galā.
        otrs izdzēšanas veids, ko var izmantot, ir sed '/' $ 1 '/ d', taču jums ir jābūt pārliecinātam par re.

        1.    LycusHackerEmo teica

          tad pabeidziet to saglabāt mapē * .odt

          Vai nav vienkāršāka veida, kā to izdarīt ar LibreOffice?

  6.   Lolo teica

    Vai jūs varētu izdzēst daļu no līnijas un atstāt pārējo?

    Pieņemsim, ka es gribu izdzēst visu vārda priekšā noteiktā rindā.

    Vai arī izdzēsiet visu, kas seko šim vārdam.

    1.    aca teica

      Jā, tas ir regex (ja nepieciešams, cilvēks sed -r, –regexp-pagarināts) vilkšana
      Sākot no tā, ko atrodu
      atbalss «Roberts: Sveiks. Mainīt šeit »| sed 's / Change //'
      ar precīzi definētu modeli un ar. (viena rakstzīme) un * (vairāk nekā viena)
      Pēc:
      atbalss «Roberts: Sveiks. Mainīt šeit »| sed 's / Change. * //'
      Pirms:
      atbalss «Roberts: Sveiks. Mainīt šeit »| sed 's /. * Mainīt //'
      Ja ir svarīgi, ka vārds parādās
      atbalss «Roberts: Sveiks. Mainīt šeit »| sed 's / Mainīt. * / Mainīt /'
      vai sarežģītāk
      rindā, kurā ir Roberts, kas notiek pēc pārmaiņām
      atbalss -e «Fritz: Sveiks. Mainīt šeit \ nRobert: Labdien. Mainīt šeit »| sed '/Robert/s/Cambio.*//'
      vai tāpat kā sākumā izņem otro rindu un pārējo apstrādā
      atbalss -e «Fritz: Sveiks. Mainīt šeit \ nRobert: Labdien. Mainīt šeit \ nCits »| sed -e 2d -e 's / Mainīt. * //'
      atbalss -e «Fritz: Sveiks. Mainīt šeit \ nRobert: Labdien. Mainīt šeit \ nCits »| sed '2d; s / Mainīt. * //'

      1.    Lolo teica

        Paldies, tas man ir ļoti noderīgs.

  7.   MSX teica

    Jauks raksts, kurš man patīk, cik lielisks SysAdmin!
    Kāda būtu mūsu dzīve bez sed, awek, perl, grep, astes, galvas, "Emacs" un tik daudziem citiem būtiskiem instrumentiem!

  8.   Līsbeta Olvarvsa teica

    Paldies, tas bija ļoti noderīgi.

  9.   Perni teica

    Sveiki, un kā jūs varētu izdzēst no faila 1,4 un 10 rindām vienā komandā?