2013-06-25 17 views
8

Mam plik o następującej postaci:Usuń do końca linii po meczu, utrzymanie linii nie dopasowane

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

w każdym wierszu zawierającym „-MIB” ciąg, chciałbym usunąć tekst podążając za tym ciągiem, aż do końca linii.

Następujące polecenie wydaje się działać zgodnie z przeznaczeniem:

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

Moim problemem jest to, że także usuwa linie gdzie mój wzór nie został znaleziony. W tym miejscu linia "BARDZO CIEKAWY TEKST" zostanie usunięta. Naprawdę nie jestem zaznajomiony z sed. Co ja robię źle? Czy sed jest odpowiedni do tego rodzaju leczenia?

Odpowiedz

3

Dokonałem edycji Twojego sed. Spróbuj tego,

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

Tutaj

-I - zrobi zmian w oryginalnym pliku i wykonuje kopię zapasową oryginalnego pliku w rozszerzeniu .bak

1

sed-n opcja hamuje domyślne drukowania, które jest później włączone, jeśli wstawisz opcję p po wydaniu sed.

W powyższym przykładzie, co mówisz sed jest wyłączenie drukowania wszystkich linii, a następnie wydrukować tylko te linie, w których dokonano podstawienia. W rezultacie linia, w której nie ma podstawienia, nigdy nie jest drukowana.

Trzeba usunąć opcję -n i p z poleceniem:

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

Dzięki za dodatkowe wyjaśnienia. –

Powiązane problemy