2009-11-12 13 views
22

Devo calcolare un'espressione regolare per eliminare tutte le righe che non iniziano con "+" o "-".Come posso eliminare tutte le righe che non iniziano con determinati caratteri?

Desidero stampare una copia su carta di un file diff ampio, ma mostra 5 o più righe prima e dopo la differenza effettiva.

+1

Perché non puoi semplicemente rigenerare il diff e dirgli di ridurre il # di righe di contesto? –

+1

Per quello che ho appena suggerito, il comando è 'diff -c 0 -u 0' –

risposta

46

In VIM:

:g!/^[+-]/d

Ecco la traduzione inglese:

g lobally fare qualcosa per tutte le linee che non ! partita l'espressione regolare: avvio della linea ^ seguito da + o -, e che qualcosa da fare è d elete quelle linee.

+0

Grande, grazie! Questa è una buona soluzione. – mager

+4

se si desidera salvare una sequenza di tasti: ': v' è un sinonimo di ': g!' :) –

+0

Ciò consente di risparmiare due sequenze di tasti! Shift, 1. Neat. – Marcin

0

diff -u <some args here> | grep '^[+-]'

O non si poteva semplicemente produrre le linee extra a tutti:

diff --unified=0 <some args>

0
cat your_diff_file | sed '/^[+-]/!D' 
+0

uso inutile di' cat': 'sed' accetta nomi di file come argomenti –

+0

Accetto per questo caso particolare. Generalmente utilizzo cat quando si utilizza una lunga catena di comandi sed per filtrare in modo incrementale i dati. Se ho un file di dati troppo grande per cominciare, sostituisco cat con head -100 e la parte rimanente rimane la stessa. –

0
egrep "^[+-]" difffile >outputfile 

Invece di eliminare tutto ciò che non corrisponde, mostra solo le linee corrispondenti. :)

+1

Hai sicuramente bisogno di un altro punto di inserimento e potrebbe non essere necessario "e" o virgolette. Questo funziona per me: 'grep^[^ + -]' –

0

Se avete bisogno di fare qualcosa di più complesso in termini di espressioni regolari, si dovrebbe utilizzare questo sito: http://txt2re.com/

fornisce anche esempi di codice per molte lingue diverse.

+0

Grazie !! Questo e spettacolare!! – mager

Problemi correlati