Sed kullanarak bir dosyadan belirli satırlar nasıl silinir

Bazı durumlarda, bir veya birkaç dosyadan belirli bir satırı silmemiz gerekir, örneğin, tüm dosyaların bir listesine sahip olduğum ve tüm bunların 27. satırını silmem gerekti (satır # 27, bir ACL , norm, kural, konfigürasyon), ya dosyayı dosya düzenleyebilirim ya da sadece ihtiyacım olanı komutunu kullanarak elde edebilirim susuzluk ve bir bash betiği (isteğe bağlı).

Ama biraz basit bir dosya deneyelim.

Dosya bizde dağıtımlar-deb.txt bunu içeren:

debian

Kubuntu

Arch Linux

çözümler

nane

Yani dosya dağıtımlar-deb.txt Debian tabanlı dağıtımları koyacağımız yerdir, ancak burada 3. satırda "archlinux" olduğunu görüyoruz, açıkçası Debian ile hiçbir ilgisi yoktur, bu nedenle bu satırı ortadan kaldırmalıyız. Bu dosyanın 3. satırını ortadan kaldırmak için aşağıdakileri koyacağız:

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

Bu satırı açıklamak biraz kolaydır. susuzluk "3d" 3. satırı sileceğimizi belirtiyoruz. dağıtımlar-deb.txt Hangi dosya üzerinde çalışılacağını belirtiyoruz, yani bu dosyanın 3. satırını sil, buraya kadar Enter tuşuna basarsak bize ne istediğimizi gösterecek ama terminalde > dağıtımlar-deb-ok.txt sonucu terminalde göstermek yerine bu isimde bir dosyaya koyduğunu belirtiyoruz.

Basit olan nedir?

Ayrıca, > dağıtımlar-deb-ok.txt uygun bir parametre kullanarak susuzlukparametre -i

Yani, satırı dosyadan silmek ve aynı adla (başka bir dosyaya değil) kaydetmek istememiz durumunda, parametreyi eklemeniz yeterlidir. -i :

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

Bu, 3. satırı distros-deb.txt'den kaldıracak ve kaydedecektir.

Ya bir satır aralığı istiyorsam, yani 3. satırı değil, aynı zamanda 4. ve 5. satırı da kaldırmak istersem? Bunu başarmak için 3 ile 5 arasındaki aralığı koyarız, yani:

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

Ve bana sadece debian ve kubuntu gösterecek 😀

Peki ya toplam satırları bilmediğimde 2. satırdan sonuncu satıra kadar silmek istersem?

Dolar sembolünü kullanın - »$

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

İlk satırdan # 4'e çıkarmak istemeniz durumunda, o zaman başa 1 değerini koyarız:

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

Bu her şeydi, görevleri otomatikleştirmek için bash komut dosyaları yapmak istediğinizde ve yapılandırma dosyalarının satırlarını değiştirip ortadan kaldırmanız gerektiğinde, kullanabileceğimiz değişiklikleri yapmak için çok yararlı bir ipucu. susuzluk o perlve ortadan kaldırmak için sed ile nasıl yapılacağını zaten biliyoruz 😉

selamlar


Makalenin içeriği şu ilkelerimize uygundur editoryal etik. Bir hata bildirmek için tıklayın burada.

16 yorum, sizinkini bırakın

Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.

  1.   mss-devel dijo

    Çok iyi katkı 😉

    1.    KZKG ^ Gaara dijo

      teşekkürler

      Bu arada, e-postanı hemen aldık, sana cevap veriyorum 😀

      selamlar

  2.   isimsiz dijo

    Terminalin, sunucuların ve ssh bağlantılarının baş rahibi olarak size geliyorum, harika KZKG ^ Gaara ve size soruyorum: cehaletim düzeyinde, paylaşmak için farklı ağlardaki iki uzak makine arasında ssh bağlantılarını kullanmama izin veren bir öğreticiyi nereden edinebilirim metin dosyaları, pdf, görüntü ve ses (mp3)….

    🙂

    Cidden, bana bu konuda rehberlik edebilir misiniz, biri işte biri evde olmak üzere iki makinem var ve aralarında bir ssh bağlantısına ihtiyacım var (çünkü anladığım kadarıyla ssh içeriğin makineler arasında paylaşılmasına izin veriyor, değil mi?).
    Ve yanılıyorsam, hangi uygulamayı tavsiye edersiniz?
    Ve bu konuda temel bir öğreticiyi nerede bulabilirim?

    1.    -spyker- dijo

      scp

      scp kullanıcı @ makine_adresi: yol kullanıcı @ makine_adresi: yol.

      Cp, kaynak -> hedef ile aynı sözdizimi.

  3.   F3niX dijo

    Sen geldin adamım, kayboldun.

  4.   Joaquin dijo

    İyi bahşiş!

  5.   LycusHackerEmo dijo

    İlginç bir ipucu… xD

    Şans eseri kalın metni öne çıkaran birini bilmiyor musunuz?
    Demek istediğim, sözlük olan bir txt dosyam var, 10000'den fazla satırı var ve ":" askı noktalarından önce belirli bir metni vurgulamasını istiyorum ve tek tek yapmak çok fazla.

    1.    KZKG ^ Gaara dijo

      Merhaba,

      Bir txt dosyası, adından da anlaşılacağı gibi düz metindir ... düz, formatlar veya benzeri bir şey olmadan, üzgünüm ama bence istediğin şey yapılamaz, değil mi? 🙁

      selamlar

      1.    aca dijo

        aslında olabilir, ancak hedef biçimini bilmeniz gerekir.
        Örneğin:
        echo $ (echo "Robert: Merhaba. Buradan değiştirin" | sed 's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m /')
        bu bir idare meselesi.
        kullanılabilecek olanı silmenin diğer yolu sed '/' $ 1 '/ d' ama yeniden olduğundan emin olmalısınız.

        1.    LycusHackerEmo dijo

          sonra * .odt biçiminde kaydetmeyi tamamlayın

          LibreOffice ile bunu yapmanın daha kolay bir yolu yok mu?

  6.   Lolo dijo

    Bir satırın bir kısmını silip gerisini bırakabilir misin?

    Diyelim ki belirli bir satırdaki bir kelimenin önündeki her şeyi silmek istiyorum.

    Veya o kelimeden sonra gelen her şeyi silin.

    1.    aca dijo

      Evet, bu bir normal ifade çekme meselesidir (gerekirse man sed -r, –regexp-extended)
      Bulduğum şeyden başlayarak
      echo «Robert: Merhaba. Buradan değiştirin »| sed 's / Değiştir //'
      iyi tanımlanmış bir modelle ve. (bir karakter) ve * (birden fazla)
      o zaman:
      echo «Robert: Merhaba. Buradan değiştirin »| sed 's / Değiştir. * //'
      Önce:
      echo «Robert: Merhaba. Buradan değiştirin »| sed 's /. * Değiştir //'
      Kelimenin görünmesi önemliyse
      echo «Robert: Merhaba. Buradan değiştirin »| sed 's / Değiştir. * / Değiştir /'
      veya daha ayrıntılı
      Robert'ı içeren satırda, Değişimden sonra gelenler
      echo -e «Fritz: Merhaba. Buradan değiştirin \ nRobert: Merhaba. Buradan değiştirin »| sed '/Robert/s/Cambio.*//'
      veya başlangıçtaki gibi ikinci satırı çıkar ve gerisini işle
      echo -e «Fritz: Merhaba. Buradan değiştirin \ nRobert: Merhaba. Buradan değiştirin \ nDiğer »| sed -e 2d -e 's / Değiştir. * //'
      echo -e «Fritz: Merhaba. Buradan değiştirin \ nRobert: Merhaba. Buradan değiştirin \ nDiğer »| sed '2d; s / Değiştir. * //'

      1.    Lolo dijo

        Teşekkürler, benim için çok faydalı.

  7.   msx dijo

    Güzel makale, beğendiklerimden biri, SysAdmin ne kadar harika!
    Sed, awek, perl, grep, tail, head, "Emacs" ve diğer birçok temel araç olmasaydı hayatımız nasıl olurdu?

  8.   Lisbeth Ollarves dijo

    Teşekkürler, çok yardımcı oldu.

  9.   Pinler dijo

    Merhaba, aynı komuttaki bir dosyadan 1,4 ve 10 satırlarını nasıl silebilirsiniz?