Usando sed para deshacerse de los caracteres <>,


18

Tengo un archivo con líneas de la siguiente manera:

...
... <230948203[234]>, ...
... <234[24]>, ...
..

Me gustaría usar sed para eliminar los caracteres < ,y >de cada línea

Intenté usarlo sed 's/<>,//g'pero no funcionó (no cambió nada). ¿Necesito escapar de estos personajes especiales? ¿Es posible eliminar varios caracteres con un solo sedcomando?


2
bash-3.2$ echo "<230948203[234]>," | tr '<>,' ' '-> 230948203 [234] -EDITED Thanks to Paul

3
@srikanthradix: Eso no elimina esos caracteres, los reemplaza con espacios. Quieres tr -d '<>,' ''(como en la respuesta de Chris Down).
Keith Thompson

1
@KeithThompson: tr -d '<>,'sin '' al final, ¿no?
usuario desconocido

@userunknown: Sí, gracias por la corrección.
Keith Thompson el

Respuestas:


43

Con sed:

sed 's|[<>,]||g'

Con tr:

tr -d '<>,'

2
Correcto, pero personalmente encuentro el uso de |como delimitador un poco confuso. sed 's/[<>]//g'Es un poco más fácil de leer.
Keith Thompson

@KeithThompson Lo uso por razones prácticas. Me encuentro lidiando con literal |(y por lo tanto teniendo que escapar de él) mucho menos de lo que tengo que lidiar con literal /.
Chris Down

2
Un punto justo. Por otro lado, |también es a menudo un metacarácter, usado para alternar en algunas sintaxis regexp (aunque seden particular lo necesita \|). Personalmente, si necesito tratar con /caracteres literales , generalmente lo uso ,como delimitador.
Keith Thompson

1
Aparte de las situaciones personales / específicas mencionadas anteriormente, existe una diferencia de sintaxis intrínseca cuando se utiliza un delimitador no estándar. El primer no delimitador / debe delimitarse para cada expresión de rango de sed , por ejemplo:printf 'a\nb\nc\n' | sed -n '\|a|,\|b|p'
Peter.O

8

Prueba este: sed 's/[<>,]//g'


¿Para qué sirven las barras verticales?
Paul Tomblin

sed 's / [<|> |] / / g' - El s hace la búsqueda; el / es el delimitador; los corchetes [] nos permiten buscar más de una cosa; el | La barra vertical es una lógica o y la g es buscar globalmente o todo el archivo.
Iman

3
No necesitas (o, de hecho, quieres) los |s dentro []. uso 's/[<>,]//g'.
Kevin

2
No necesitas una barra vertical. Cualquier cosa entre corchetes se busca como una lista. sed 's/[<>,]/ /g'funcionará exactamente bien, excepto que su idea eliminará las barras verticales también.
Paul Tomblin

Para agregar: tal vez desee buscar expresiones regulares, este es uno de los ejemplos más fáciles, pero ya demuestra el poder.
Bernhard
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.