2013-06-25 23 views
8

eşleşmedi hatları tutmak, bir maçtan sonra hattın sonuna kadar silin: "-MIB" dizesini içeren her satırdaBen aşağıdaki biçimde dosya

interesting text-MIB blah blah blah 
VERY INTERESTING TEXT 
interesting text-MIB blah blah blah 

, ben metni silmek istiyorum Bu dizgeyi takip ederek, çizginin sonuna kadar. o da benim desen bulunmazsa satırları siler o

sed -i -n -e 's/-MIB.*$/-MIB/p' ./myfile 

Benim sorundur:

aşağıdaki komutu amaçlandığı şekilde çalışıyor gibi görünüyor. Burada "ÇOK İLGİNÇ METİN" satırı silinecek. Sed ile aşina değilim. Neyi yanlış yapıyorum? Sed bu tür tedaviye uygun mu?

cevap

3

sed ürününü sizin için düzenledim. Orijinal dosyada değişiklik yapacak ve .bak uzantısı orijinal dosyanın yedeğini alır

1

sed-n seçenektir varsayılan baskı bastırır - İşte

sed -i.bak 's/-MIB.*$/-MIB/g' ./myfile 

,

-i bu deneyin Daha sonra, sed ifadenizden sonra p seçeneğini koyarsanız etkinleştirildi.

Yukarıdaki örnekte, sed'a söylediğiniz, tüm satırların yazdırılmasını bastırmak ve daha sonra yalnızca ikame işleminin başarıyla gerçekleştirildiği satırları yazdırmaktır. Sonuç olarak, hiçbir ikame yapılmayan çizgi asla basılmaz.

sed -ie 's/-MIB.*$/-MIB/' ./myfile 
+0

Teşekkür ek açıklama için:

Sen komutundan -n seçeneği ve p kaldırmak gerekir. –