Questa domanda ha già una risposta qui:
In Vim trovo spesso che sono interessato solo alle righe contenenti una determinata stringa di testo e voglio eliminare tutte le altre righe.
È facile abbinare le righe contenenti una stringa:
:s/^.*foo.*\n//
Quello che normalmente finisco per fare sono due passaggi, uno per "contrassegnare" tutte le linee che voglio con un primo carattere speciale:
:s/^\(.*foo.*\)$/X\1/
E nel secondo passaggio è facile fare una corrispondenza negativa per un personaggio in una posizione fissa, quindi elimino tutte le linee senza la mia stringa in questo modo:
:s/^[^X].*\n//
Ma non c'è un modo molto più semplice per farlo con un solo passaggio? Cosa mi sto perdendo?