Elimina fino alla fine della linea dopo una partita, mantenere le linee non corrispondono

Ho un file con il formato seguente:

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

In ogni riga contenente il “-MIB” string, vorrei eliminare il testo che segue questa stringa, fino alla fine della riga.

Il seguente comando sembra funzionare correttamente:

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

Il mio problema è che si elimina anche le linee in cui il mio modello non è stato trovato. Qui, la linea “MOLTO INTERESSANTE TESTO” dovrebbe essere eliminato. Io non sono molto familiare con sed. Che cosa sto facendo di sbagliato? È sed adatti per questo tipo di trattamento?

 

3 Replies
  1. 3

    Ho modificato il tuo sed. Prova questo,

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

    Qui,

    -i – farà le modifiche nel file originale e prende la copia di backup del file originale in .bak estensione

  2. 1

    sed -n opzione elimina predefinito di stampa che, in seguito viene attivato se si mette p opzione dopo che il sed istruzione.

    Nel tuo esempio sopra, quello che si sta dicendo sed è quello di sopprimere la stampa di tutte le linee e poi stampare solo le righe in cui la sostituzione è stata effettuata con successo. Come risultato della riga in cui nessuna sostituzione è fatta non viene mai stampato.

    È necessario rimuovere il -n opzione e p dal comando:

    sed -ie 's/-MIB.*$/-MIB/' ./myfile
    
    • Grazie per l’ulteriore spiegazione.

Lascia un commento