2009-04-11 12 views
9

Estoy leyendo desde una línea de unos 500 caracteres. ¿Cómo puedo obtener sed, en lugar de reemplazar esa cadena con algo, reemplazar el resto de la línea con algo? En resumen, quiero eliminar todo el texto alrededor de una cadena especificada. Eliminar columnas con awk no funcionará, porque hay una cantidad indeterminada de caracteres antes y después de la cadena coincidente. Alguna idea?Cómo invertir la salida de sed?

Respuesta

10

Intente utilizar volver referencias:

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

Los .* 's alrededor de la cadena de búsqueda coincidirá con todo, pero la cadena, y los paréntesis decirle sed de recordar lo que corresponde. Puede consultar la primera cadena coincidente con \1.

He aquí un ejemplo (en sustitución de todo menos 'baz bar'):

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

se puede reemplazar 'bar baz' con cualquier patrón que te gusta en lo anterior; Solo utilicé una cadena básica para simplificar.