Usando sed para se livrar dos caracteres <>,

18

Eu tenho um arquivo com linhas da seguinte maneira:

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

Eu gostaria de usar o sed para remover os caracteres < ,e >de todas as linhas

Eu tentei usar, sed 's/<>,//g'mas não funcionou (não mudou nada). Preciso escapar desses caracteres especiais. É possível excluir vários caracteres usando um único sedcomando?

Amelio Vazquez-Reina
fonte
2
bash-3.2$ echo "<230948203[234]>," | tr '<>,' ' '-> 230948203 [234] -EDITED Thanks to Paul
3
@srikanthradix: Isso não remove esses caracteres, substitui-os por espaços. Você quer tr -d '<>,' ''(como na resposta de Chris Down).
Keith Thompson
1
@KeithThompson:, tr -d '<>,'sem '' no final, não?
desconhecido usuário
@userunknown: Sim, obrigado pela correção.
9788 Keith Thompson #

Respostas:

42

Com sed:

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

Com tr:

tr -d '<>,'
Chris Down
fonte
2
Correto, mas pessoalmente acho o uso de |um delimitador um pouco confuso. sed 's/[<>]//g'é um pouco mais fácil de ler.
Keith Thompson
@KeithThompson Eu uso isso por praticidade. Eu me pego lidando com literal |(e, portanto, tendo que escapar dela) muito menos do que tenho que lidar com literal /.
31712 Chris Down
2
Um ponto justo. Por outro lado, |também costuma ser um meta-caractere, usado para alternância em algumas sintaxes de expressão regular (embora sedem particular seja necessário \|). Pessoalmente, se eu precisar lidar com /caracteres literais , geralmente o uso ,como delimitador.
Keith Thompson
1
Além das situações pessoais / específicas mencionadas acima, há uma diferença de sintaxe intrínseca ao usar um delimitador não padrão. O primeiro / delimitador não deve ser precedido por cada intervalo sed expressão, por exemplo:printf 'a\nb\nc\n' | sed -n '\|a|,\|b|p'
Peter.O
8

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

Iman
fonte
Para que servem as barras verticais?
Paul Tomblin
sed 's / [<|> |] / / g' - O s faz a pesquisa; o / é o delimitador; os colchetes [] vamos procurar mais de uma coisa; o | barra vertical é lógica ou eg é para procurar globalmente ou todo o arquivo.
Iman
3
Você não precisa (ou realmente quer) os |s dentro []. use 's/[<>,]//g'.
Kevin
2
Você não precisa de uma barra vertical. Qualquer coisa entre colchetes é pesquisada como uma lista. sed 's/[<>,]/ /g'funcionará exatamente como bem, exceto que sua ideia também removerá barras verticais.
Paul Tomblin
Para adicionar: talvez você queira procurar expressões regulares, este é um dos exemplos mais fáceis, mas já demonstra o poder.
Bernhard