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
16 yorum, sizinkini bırakın
Çok iyi katkı 😉
teşekkürler
Bu arada, e-postanı hemen aldık, sana cevap veriyorum 😀
selamlar
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?
scp
scp kullanıcı @ makine_adresi: yol kullanıcı @ makine_adresi: yol.
Cp, kaynak -> hedef ile aynı sözdizimi.
Sen geldin adamım, kayboldun.
İyi bahşiş!
İ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.
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
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.
sonra * .odt biçiminde kaydetmeyi tamamlayın
LibreOffice ile bunu yapmanın daha kolay bir yolu yok mu?
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.
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. * //'
Teşekkürler, benim için çok faydalı.
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?
Teşekkürler, çok yardımcı oldu.
Merhaba, aynı komuttaki bir dosyadan 1,4 ve 10 satırlarını nasıl silebilirsiniz?