2009-04-11 15 views
9

Sto leggendo da una riga di circa 500 caratteri. Come posso ottenere sed, invece di sostituire quella stringa con qualcosa, sostituire il resto della linea con qualcosa? In breve, voglio rimuovere tutto il testo attorno a una stringa specificata. L'eliminazione di colonne con awk non funzionerà, perché c'è una quantità indeterminata di caratteri prima e dopo la stringa con corrispondenza. Qualche idea?Come invertire l'output di sed?

risposta

10

Provare a utilizzare di nuovo i riferimenti:

sed 's/.*\(searchstring\).*/___\1___/' 

I .* 's intorno la stringa di ricerca corrisponderà tutto, ma la corda, e le parentesi dire sed di ricordare ciò che ha trovato. È possibile fare riferimento alla prima stringa corrispondente con \1.

Ecco un esempio (in sostituzione di tutto, ma 'bar baz'):

$ echo "foo bar baz qux" | sed 's/.*\(bar baz\).*/___\1___/' 
___bar baz___ 

si può sostituire 'bar baz' con qualsiasi modello che ti piace in quanto sopra; Ho appena usato una stringa di base per la semplicità.